Depuis que je devais travailler avec pi (3.1415 ...) en C # J'ai utilisé Math.PI pour obtenir la valeur. Habituellement, je voudrais simplement utiliser des valeurs telles que J'ai supposé que ces deux classes étaient interchangeables, mais j'ai remarqué que math.pi / 2.0 code> ou
2.0 * math.pi code>, mais je viens de remarquer que XNA fournit une classe MathHelper. La bonne chose à propos de ceci est que je peux appeler
mathhelper.piover2 code> et
mathhelper.twopi code>, faisant ainsi une étape extrêmement triviale encore plus triviale. ; -) p>
math.pi / 2.0! = Mathhelper.Piover2 code>. J'ai essayé de rechercher pourquoi ce serait, mais je n'ai rien trouvé. Alors, je pensais que je voudrais essayer ma chance ici. En ce qui concerne l'utilisation de PI, existe-t-il des différences entre la classe de mathématiques et la classe MathHelper? Est-ce que l'on préfère sur l'autre? Ou devrais-je juste partir assez bien seul et assurez-vous simplement d'utiliser systématiquement l'un ou l'autre tout au long de mon programme? P>
3 Réponses :
Comment pas égal est qu'ils? S'ils sont suffisamment proches, cela pourrait être le problème traditionnel qui testant l'égalité avec des points flottants est presque impossible. P>
Aussi, sont-ils du même type? Mon opinion était la plupart des calculs de jeu ont été effectuées avec des flotteurs, où comme maths.pi serait un double. P>
Ce n'est pas vraiment un problème de test d'égalité depuis que j'ai découvert cela mon regard sur la différence, ce qui devrait atteindre 0,000000000 si elles étaient identiques. Au lieu de: MathHelper.PI - MATH.PI = 8.74227801261895E-08. Ceci est certainement assez proche pour ce que j'ai besoin de tester. J'étais juste curieux pourquoi ils seraient différents. Mais je suis d'accord, ça doit être un flotteur vs double problème.
Qu'il soit office de 10 ^ -8 est probablement indicatif de la double différence de précision de la précision, spécifiquement, un flotteur n'est plus précis que d'environ 7 à 8 chiffres.
regarder au chiffre: p>
3,141592653589790000000000000000000 // MATH.PI P>
3,1415930000000000000000000000000 // MathHelper.PI P>
3,1415926535897932384626433832795 // PI de Windows Calc P>
1,570796326794900000000000000000000 // MATH.PI / 2 P>
1,570796370506290000000000000000000 // mathhelper.piover2 p>
1,570796000000000000000000000000000 // mathhelper.pi / 2 p>
1,5707963267948966192313216916398 // PI / 2 de Windows Calc P>
Explication du problème: la perte de précision p>
meilleur pi / 2 = math.pi / 2 p>
meilleur pi / 2 n'est pas math.pi / 2! p>
Dans le développement de jeux N'utilisez pas la constante Math.PI, la perte de précision est négligeable, vous ne verrez pas la différence dans le mouvement de vos objets de jeu ... la performance est plus importante. L'utilisation de MathHelper.Piover2 vous fera économiser une double division et une conversion double à flotter. Cela pourrait sembler très peu d'aide, mais il existe des problèmes de calcul intensive (systèmes de particules) lorsque la différence est importante. P>
Je serais surpris si Mathhelper n'appelle pas Math.Pi dans les coulisses.