Floating point 用值除零时防止NaN
我正在用OpenGL在D中编写一个3D游戏,我在浮点方面遇到了问题。当我用另一个浮点值(非零)除零时,它总是NaN而不是0。这会造成麻烦,因为NaN会在整个代码中传播,其他所有与它相除/相乘的东西也会变成NaN。我真的不想用Floating point 用值除零时防止NaN,floating-point,d,nan,Floating Point,D,Nan,我正在用OpenGL在D中编写一个3D游戏,我在浮点方面遇到了问题。当我用另一个浮点值(非零)除零时,它总是NaN而不是0。这会造成麻烦,因为NaN会在整个代码中传播,其他所有与它相除/相乘的东西也会变成NaN。我真的不想用if值来包装我所有的分区!=0.0f检查 如果getCurrentSpeed()返回0.0f,则像float value=getCurrentSpeed()/getMaxSpeed()这样的简单检查将返回NaN。当除法时,比如说x/y,你可以得到四个结果(前提是x和y都不是N
if值来包装我所有的分区!=0.0f
检查
如果
getCurrentSpeed()
返回0.0f,则像float value=getCurrentSpeed()/getMaxSpeed()
这样的简单检查将返回NaN。当除法时,比如说x/y
,你可以得到四个结果(前提是x
和y
都不是NaN,+Inf,Inf
):
我们可以得出结论,无论是
getCurrentSpeed()
还是getMaxSpeed()
都是零,您必须测试getMaxSpeed()
是否为0
,问题的根源似乎是在一个外部库中,当向量应该为零时,向量的长度计算为NaN。
0 when y != 0 -- <- expected
+Inf x > 0 and y == 0
-Inf x < 0 and y == 0
NaN x == 0 and y == 0 -- <- actual
float value = getCurrentSpeed() / getMaxSpeed()