【问题标题】:Preventing NaN when dividing zero with value用值除零时防止 NaN
【发布时间】:2016-02-18 19:49:25
【问题描述】:

我正在使用 D 中的 OpenGL 编写一个 3D 游戏,但我遇到了浮点问题。当我将零与另一个浮点值(非零)相除时,它将始终为 NaN 而不是 0。这会导致麻烦,感觉 NaN 将在整个代码中传播,感觉除/乘以它的所有其他内容也变为 NaN。我真的不想用if value != 0.0f 检查我的所有部门。

如果getCurrentSpeed() 返回 0.0f,则像 float value = getCurrentSpeed() / getMaxSpeed() 这样的简单检查将返回 NaN。

【问题讨论】:

    标签: floating-point d nan


    【解决方案1】:

    当划分时,比如说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()
    

    我们可以得出结论 both getCurrentSpeed()getMaxSpeed() 都是 并且您必须测试 getMaxSpeed() 是否是 0

    【讨论】:

    • 看来问题出在外部库中,其中向量的长度在应该为零时计算为 NaN。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 2015-04-02
    • 1970-01-01
    • 2021-07-14
    • 2020-08-10
    • 2021-07-14
    相关资源
    最近更新 更多