Точность с плавающей точкой (fp: точная или fp: быстрая)

10

В C или C ++, действительно ли опция компилятора точности с плавающей точкой имеет значение в реальных (маленьких / инди) играх?

Из моих наблюдений установка fp: fast во много раз быстрее, чем fp: точная, и из того, что я понимаю здесь ( /programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-Встреча ) разница в точности между двумя опциями компилятора изменяется только от 16-й цифры числа с плавающей запятой.

Кто-нибудь сталкивался с примером, когда fp: fast работал ужасно неправильно для 2D или 3D игр?

Изменить: чтобы уточнить, я не спрашиваю о точности самих значений с плавающей запятой (т. Е. Float против двойной против десятичной). Только о точности, связанной с опцией компилятора.

Инишир
источник

Ответы:

11

Ваша интерпретация fp: fast против fp: точные звуки подозрительно; Я уверен, что есть больше эффекта, чем просто ошибка округления после 16-го знака после запятой. Я отсылаю вас к статье Брюса Доусона о точности с плавающей точкой для более подробной информации.

В общем, ошибка точности с плавающей точкой, безусловно, является реальной проблемой в разработке игр. Это особенно неприятно для программистов-физиков и для игр с большими мирами или с большим временем выполнения (порядка недель или месяцев, как в MMO). Ошибки точности с плавающей точкой чаще всего проявляются в нестабильности симуляции и дрожании движения, которое постепенно ухудшается со временем. Если вы не видите подобных артефактов в своей игре, и прирост производительности значителен, тогда определенно стоит придерживаться fp: fast.

postgoodism
источник
1
-1 Точность с плавающей точкой не является большой проблемой при разработке игры. Выбор неправильных типов данных и отсутствие числовых знаний и алгоритмов - причина всех проблем, упомянутых в этом посте. Все проекты, в которых я принимал участие, использовали fp: fast, ни с одной из упомянутых проблем.
Майк Земдер
Да, наши выводы совпадают. Я хотел сказать, что точность с плавающей запятой может быть проблемой в определенных областях разработки игр, и поэтому (в этих областях) вам нужны числовые знания и правильные типы данных, которые вы упомянули.
постгудизм
+1 как за отличную ссылку, так и за ответ, который вы дали maik semder. Я также видел, как люди борются с подобными ошибками просто потому, что они не знают, какие операции им следует использовать в своих кодах.
Ali1S232
@postgoodism Спасибо за ответ. Не игнорируя ваш вклад. Просто подожди еще день или два, чтобы узнать, получу ли я больше ответов.
Инишир
@MaikSemder В основном просто используйте fp:fastтогда, если вы действительно не хотите, fp:preciseесли вы заметили различные странные проблемы (могут быть замечены в сложных вычислениях в играх, таких как физика, как сказал @postgoodism). Спасибо, было интересно об этом.
Никос