Floating point 用值除零时防止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

我正在用OpenGL在D中编写一个3D游戏,我在浮点方面遇到了问题。当我用另一个浮点值(非零)除零时,它总是NaN而不是0。这会造成麻烦,因为NaN会在整个代码中传播,其他所有与它相除/相乘的东西也会变成NaN。我真的不想用
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()