ПрограммированиеФорумСеть

Почему нельзя использовать события в онлайн шутерах для смены позиции? (2 стр)

Страницы: 1 2
#15
1:08, 6 апр 2013

>> за счет погрешности вычисления float на разных системах
какие процессоры вычисляют float поразному для одного и тогоже приложения (клиента) ?

#16
1:19, 6 апр 2013

wawan
> какие процессоры вычисляют float поразному для одного и тогоже приложения
> (клиента) ?
Я и сам не вкурсе, может быть эта проблема даже надумана.
Однако что если дело не только в процессоре? Что если разные математические библиотеки? Если сервер написан на C#, а клиент на C++ и каждый будет использовать свою функцию Sqrt например?

Но предположим даже если мы используем идентичную математическую библиотеку и на сервере и на клиенте, но системы разные? На клиенте смартфон-android, а на сервере linux? Будут ли одинаковыми вычисления? Насколько я знаю стандарт плавающей точки постоянно меняют и у разных процессоров может отличаться, не знаю, не специалист в данном вопросе.

#17
2:21, 6 апр 2013

Результат одного и того же выражения из float-ов может быть разным просто на разных версиях/флагах компилятора, не говоря уже о разных компиляторах/OS/платформах. Соответственно, нормальный детерминированный движок должен быть на целых числах фиксированного размера (вроде uint32_t).

#18
2:26, 6 апр 2013

Вот смотри, тесты для разных языков (C# и C++), на одном и том же компьютере, даже без применения библиотек:

C++:

for(int i = 100000000; i < 100000100; i++)
{
  float x = 10.0f / (float)i;
  int result = *(int*)&x;
  cout<<result<<endl;
}

C#:

for(int i = 100000000; i < 100000100; i++)
{
  float x = 10.0f / (float)i;
  int result;
  unsafe
  {
    result = *(int*)&x;
  }
  Console.WriteLine(result);
}
Изображение
#19
3:08, 6 апр 2013

НуиЧо
}:+()___ [Smile]
Ребята, ей богу, почитайте про работу floating-point. Потому что аж читать тошно. Когда люди проверяют работу float, то во первых тесты пишутся на asm (или удостоверяются что выхлоп языке высокого уровня одинаков), во вторых следят за настройками FPU/SSE, которые, внезапно, тоже управляются из любого нормального приложения и естественно долны быть одинаковыми (ну вы подумайте, если у вас в одном месте поставленно округление до ближайшего, а в другом отбрасывание дробной части, то как вы думаете почему результаты разные?).

#20
3:26, 6 апр 2013

Bishop
> Ребята, ей богу, почитайте про работу floating-point. Потому что аж читать
> тошно
Спец на диване? Давай напиши тест приведенный выше, чтобы он дал одинаковые результаты.
Ты движек тоже будешь писать на асме?

Между тем, теоретически можно менять FPU точность, как это делает DirectX. Не знаю можно ли этим добиться идентичности на разных платформах и устройствах. Или хотя бы на разных языках.

UPD1:
Вот вычитал кое где относительно C#:
Basically, you are guaranteed 32 bit precision OR BETTER, but you can NEVER predict whether you're going to get better than 32 bit precision or not.

Может на C++ по другому, но где гарантии? Последний раз стандарт IEEE 754 меняли в 2008 году. Означает ли это что все процессоры произведенные до этого будут давать другой результат?

UPD2:
Вот нашел похожую тему:
http://gamedev.stackexchange.com/questions/14776/how-are-determin… non-determini
Вроде люди пишут что можно, некоторые даже на C# вроде смогли, целиком не читал. Опять же терзают сомнения.

Задумайся над этой фразой, которую кое кто написал, если это правда:
I’m concerned about the possible differences between hardware implementations of IEEE-754. I already know about the problem of programming languages introducing subtle differences between what is written in the source code and what is actually executed at the assembly level. [Mon08] Now, I’m interested in differences between, say, Intel/SSE and PowerPC at the level of individual instructions.
Если это так, то это означает, что стандарт IEEE-754 допускает "udefined bahavior" который отдан на откуп производителям процессоров.

Что мы имеем в итоге? Даже если и можно - то это тот еще геморой.

#21
4:55, 6 апр 2013

http://www.youtube.com/watch?v=oyvIDklWxyk

вот первая часть, там и другие найдешь. и проблемы узнаешь. если захочешь поясню, ибо я там был и мне досталось.

#22
5:00, 6 апр 2013

my.name
Посмотрю.

Кстати еще советуют использовать Fixed Point.

UPD1:
В 3й части он говорит, что они для решения проблем с floating point использовали Double, а Float у них использовать не получилось из-за проблем. Язык они использовали C#. В поддержку подхода он говорит, что по тестам "вроде" на разных системах были одинаковые результаты. Отсюда следует, что:
1) Они использовали один язык и на сервере и на клиенте = C#.
2) Они вместо Float использовали Double.
3) Гарантии относительно разных систем нет, просто по прикидкам.
4) Кроме того как я понял они иногда используют синхронизирующие пакеты.

Ладно не в этом всём дело, вопрос был конкретно про 3D FPS, выводы сделаны в нулевом посте, вроде добавить нечего. Если коротко, то основная неубираемая причина "МЫШКА", при управлении которой можно спровоцировать криволинейное движение. Детерминизм floating point другой вопрос, тоже интересный, но не для данной темы.

Тему можно считать закрытой, ответ найден.

Страницы: 1 2
ПрограммированиеФорумСеть

Тема в архиве.

Тема закрыта.