Precyzja zmiennoprzecinkowa (FP: precyzyjna vs. FP: szybka)


10

Czy w C lub C ++ opcja kompilacji z precyzją zmiennoprzecinkową naprawdę robi różnicę w grach na świecie (małych / niezależnych)?

Z moich obserwacji wynika, że ​​ustawienie fp: fast jest wielokrotnie szybsze niż fp: precyzyjne i z tego, co tutaj rozumiem ( /programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-spotkanie ) różnica precyzji między dwiema opcjami kompilatora zmienia się tylko od 16 cyfry liczby zmiennoprzecinkowej.

Czy ktoś napotkał przykład podczas korzystania z fp: fast poszło bardzo źle w grach 2D lub 3D?

Edycja: Aby wyjaśnić, nie pytam o precyzję samych wartości zmiennoprzecinkowych (tj. Zmiennoprzecinkowe vs podwójne vs dziesiętne). Tylko o precyzji związanej z opcją kompilatora.

Odpowiedzi:


11

Twoja interpretacja fp: fast vs fp: precyzja brzmi podejrzanie; Jestem pewien, że jest coś więcej niż tylko błąd zaokrąglania po 16 miejscu po przecinku. Więcej szczegółów odsyłam do artykułu Bruce'a Dawsona na temat precyzji zmiennoprzecinkowej .

Zasadniczo błąd precyzji zmiennoprzecinkowej jest zdecydowanie prawdziwym problemem w rozwoju gier. Jest to szczególnie kłopotliwe dla programistów fizyki i gier z dużymi światami lub długim czasem działania (rzędu tygodni lub miesięcy, np. MMO). Błędy precyzji zmiennoprzecinkowej najczęściej objawiają się jako niestabilność symulacji i ruch roztrzęsiony, który z czasem pogarsza się. Jeśli nie widzisz tego rodzaju artefaktów w grze, a wzrost wydajności jest znaczny, zdecydowanie zdecydowanie powinno być bezpiecznie trzymać się fp: fast.


1
-1 Dokładność zmiennoprzecinkowa nie jest głównym problemem w rozwoju gier. Wybór niewłaściwych typów danych oraz brak wiedzy numerycznej i algorytmów jest przyczyną wszystkich problemów wymienionych w tym poście. We wszystkich projektach, w których brałem udział, wykorzystano fp: fast bez żadnego z wymienionych problemów.
Maik Semder

Tak, nasze wnioski są takie same. Chodziło mi o to, że precyzja zmiennoprzecinkowa może być problemem w niektórych obszarach rozwoju gry i dlatego (w tych obszarach) potrzebujesz wiedzy numerycznej i odpowiednich typów danych, o których wspomniałeś.
postgoodism

+1 za oba świetne linki i za odpowiedź, którą dałeś maik semder. Widziałem także ludzi zmagających się z tego rodzaju błędami, po prostu dlatego, że nie wiedzą, jakie operacje powinni zastosować w swoich kodach.
Ali1S232,

@postgoodism Dzięki za odpowiedź. Nie ignorując twoich danych wejściowych. Po prostu poczekaj kolejny dzień lub dwa, aby zobaczyć, czy otrzymam więcej odpowiedzi.
Inisheer,

@MaikSemder Zasadniczo po prostu użyj fp:fastwtedy, chyba że naprawdę chcesz, fp:precisejeśli zauważysz różne dziwne problemy (można to zauważyć w złożonych obliczeniach w grach, takich jak fizyka, jak powiedział @postgoodism). Dzięki, zastanawiałem się nad tym.
Nikos,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.