将零除以值时防止 NaN
Preventing NaN when dividing zero with value
我正在使用 D 中的 OpenGL 编写 3D 游戏,但我在处理浮点数时遇到了问题。当我将零除以另一个浮点值(非零)时,它将始终为 NaN 而不是 0。这会导致麻烦,因为 NaN 将在整个代码中传播,感觉与它 divided/multiplied 相关的所有其他内容也会变成 NaN。我真的不想用 if value != 0.0f
检查来包装我的所有部门。
如果 getCurrentSpeed()
return 0.0f.
,像 float value = getCurrentSpeed() / getMaxSpeed()
这样的简单检查将 return NaN
除法时,说x / y
,可以得到四个个结果(前提是x
和y
都不是NaN, +Inf, Inf
):
0 when y != 0 -- <- expected
+Inf x > 0 and y == 0
-Inf x < 0 and y == 0
NaN x == 0 and y == 0 -- <- actual
所以在你的情况下 - NaN
计算时
float value = getCurrentSpeed() / getMaxSpeed()
我们可以得出结论 getCurrentSpeed()
和 getMaxSpeed()
都是 zeros 你必须测试 getMaxSpeed()
因为 0
我正在使用 D 中的 OpenGL 编写 3D 游戏,但我在处理浮点数时遇到了问题。当我将零除以另一个浮点值(非零)时,它将始终为 NaN 而不是 0。这会导致麻烦,因为 NaN 将在整个代码中传播,感觉与它 divided/multiplied 相关的所有其他内容也会变成 NaN。我真的不想用 if value != 0.0f
检查来包装我的所有部门。
如果 getCurrentSpeed()
return 0.0f.
float value = getCurrentSpeed() / getMaxSpeed()
这样的简单检查将 return NaN
除法时,说x / y
,可以得到四个个结果(前提是x
和y
都不是NaN, +Inf, Inf
):
0 when y != 0 -- <- expected
+Inf x > 0 and y == 0
-Inf x < 0 and y == 0
NaN x == 0 and y == 0 -- <- actual
所以在你的情况下 - NaN
计算时
float value = getCurrentSpeed() / getMaxSpeed()
我们可以得出结论 getCurrentSpeed()
和 getMaxSpeed()
都是 zeros 你必须测试 getMaxSpeed()
因为 0