将零除以值时防止 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,可以得到四个个结果(前提是xy都不是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