Précision en virgule flottante (fp: précis vs fp: rapide)

10

En C ou C ++, l'option compilateur de précision à virgule flottante fait-elle vraiment une différence dans les jeux du monde réel (petit / indépendant)?

D'après mes observations, la définition de fp: fast est plusieurs fois plus rapide que fp: precise et d'après ce que je comprends ici ( /programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-rencontre ) la différence de précision entre les deux options du compilateur ne change qu'à partir du 16e chiffre d'un nombre à virgule flottante.

Quelqu'un a-t-il rencontré un exemple lors de l'utilisation de fp: fast s'est terriblement mal passé pour les jeux 2D ou 3D?

Edit: Pour clarifier, je ne pose pas de question sur la précision des valeurs à virgule flottante elles-mêmes (c'est-à-dire flottant vs double vs décimal). Uniquement sur la précision liée à l'option du compilateur.

Inisheer
la source

Réponses:

11

Votre interprétation de fp: rapide vs fp: sons précis suspects; Je suis sûr qu'il y a plus d'effet qu'une simple erreur d'arrondi après la 16e décimale. Je vous renvoie à l'article de Bruce Dawson sur la précision en virgule flottante pour plus de détails.

En général, l'erreur de précision en virgule flottante est certainement un vrai problème dans le développement de jeux. C'est particulièrement gênant pour les programmeurs de physique et pour les jeux avec de grands mondes ou de longues durées de fonctionnement (de l'ordre de semaines ou de mois, comme un MMO). Les erreurs de précision en virgule flottante se manifestent le plus souvent sous forme d'instabilité de simulation et de mouvement instable qui s'aggrave progressivement avec le temps. Si vous ne voyez pas ce genre d'artefacts dans votre jeu et que l'augmentation des performances est importante, alors il devrait être sûr de s'en tenir à fp: fast.

postgoodism
la source
1
-1 La précision en virgule flottante n'est pas un problème majeur dans le développement de jeux. Le choix de mauvais types de données et le manque de connaissances numériques et d'algorithmes sont à l'origine de tous les problèmes mentionnés dans ce billet. Tous les projets auxquels j'ai participé ont utilisé fp: fast sans aucun des problèmes mentionnés.
Maik Semder
Oui, nos conclusions sont les mêmes. Mon point était que la précision en virgule flottante peut être un problème dans certains domaines du développement de jeux, et c'est pourquoi (dans ces domaines) vous avez besoin des connaissances numériques et des types de données appropriés que vous avez mentionnés.
postgoodism
+1 à la fois pour le grand lien et pour la réponse que vous avez donnée à maik semder. J'ai également vu des gens aux prises avec ce genre d'erreurs, simplement parce qu'ils ne savent pas quel type d'opérations ils devraient utiliser dans leurs codes.
Ali1S232
@postgoodism Merci d'avoir répondu. Ne pas ignorer votre entrée. Je peux attendre un jour ou deux pour voir si j'obtiens plus de réponses.
Inisheer
@MaikSemder Fondamentalement, il suffit d'utiliser fp:fast alors, à moins que vous ne vouliez vraiment le fp:precisesi vous remarquez divers problèmes étranges (pourraient être remarqués dans des calculs complexes dans des jeux, tels que la physique comme l'a dit @postgoodism). Merci, je me demandais à ce sujet.
Nikos