C#Math与XNA MathHelper

Sup*_*zed 10 c# math xna pi

自从我需要在C#中使用PI(3.1415 ...)后,我使用了Math.PI来获取值.通常我会使用像Math.PI/2.0或的值2.0*Math.PI,但现在我注意到XNA提供了一个MathHelper类.关于这个的好处是我可以打电话MathHelper.PiOver2MathHelper.TwoPi,从而使更琐碎的小事无比一步.;-)

我认为这两个课程是可以互换的,但我注意到了Math.PI/2.0 != MathHelper.PiOver2.我试着研究为什么会这样,但我一无所获.所以,我以为我会在这里试试运气.关于使用PI,Math类和MathHelper类之间是否存在差异?一个比另一个更受欢迎吗?或者我应该单独留下足够好的东西,并确保在我的整个计划中始终如一地使用其中一个?

Cod*_*Tao 12

他们有多相同?如果它们足够接近,这可能只是传统的问题,即用浮点测试相等性几乎是不可能的.

它们是同一类型的吗?我的观点是大多数游戏计算是用浮点数完成的,其中Math.PI是双倍的.

编辑:MathHelper确实使用浮点数


And*_*hin 8

看数字:

3,1415926535897900000000000000000 // Math.PI

3,1415930000000000000000000000000 // MathHelper.PI

3,1415926535897932384626433832795 //来自Windows Calc的PI


1,5707963267949000000000000000000 // Math.PI/2

1,5707963705062900000000000000000 // MathHelper.PiOver2

1,5707960000000000000000000000000 // MathHelper.Pi/2

1,5707963267948966192313216916398 //来自Windows Calc的PI/2


问题解释:准确性的损失

最佳PI/2 = Math.PI/2