Точність з плаваючою точкою (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 vs double vs decimal). Тільки про точність, пов’язану з опцією компілятора.

Відповіді:


11

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

Загалом, помилка точності з плаваючою комою, безумовно, справжня проблема в розробці гри. Це особливо клопітно для програмістів фізики та для ігор з великими світами або тривалими робочими часами (на порядку тижнів чи місяців, як MMO). Помилки точності з плаваючою точкою найчастіше проявляються як нестабільність моделювання та рухливість, що поступово з часом погіршується. Якщо у вашій грі ви не бачите таких видів артефактів, а підвищення продуктивності є значним, тоді, безперечно, слід дотримуватися функції fp: fast.


1
-1 Точність з плаваючою точкою не є основною проблемою в розвитку ігор. Вибір неправильних типів даних та відсутність числових знань та алгоритмів є причиною всіх проблем, згаданих у цій публікації. Усі проекти, в яких я брав участь, використовували fp: fast з жодною із згаданих проблем.
Майк Семдер

Так, наші висновки однакові. Моя думка полягала в тому, що точність плаваючої точки може бути проблемою в певних сферах розвитку ігор, і саме тому (в цих областях) вам потрібні чисельні знання та правильні типи даних, які ви згадали.
постгудизм

+1 як за чудове посилання, так і за відповідь, яку ви дали maik semder. Я також бачив людей, які борються з подібними помилками, просто тому, що вони не знають, які операції вони повинні використовувати у своїх кодах.
Ali1S232

@postgoodism Дякую за відповідь. Не ігноруючи ваш внесок. Просто зачекайте ще день чи два, щоб побачити, чи отримаю я більше відповідей.
Inisheer

@MaikSemder В основному просто використовуйте fp:fastтоді, якщо ви не хочете, fp:preciseякщо ви помітите різні дивні проблеми (це можна помітити в складних обчисленнях в іграх, таких як фізика, як сказав @postgoodism). Дякую, було цікаво з цього приводу.
Нікос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.