2015-11-17 146 views
2

我正在用D中的OpenGL编写一个3D游戏,并且遇到浮点问题。当我将零与另一个浮点值(非零)分开时,它将始终为NaN而不是0.这导致NaN在整个代码中传播时感到麻烦,所有其他分裂/相乘的其他所有内容也会变成NaN。我真的不想用if value != 0.0f支票包住我所有的部门。用零除零值时防止NaN

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

回答

1

分割时说x/y,你可以得到成果(提供既不x也不yNaN, +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(),你必须测试getMaxSpeed()为是0

+0

看来,问题的起源是在一个向量的长度计算为NaN当它应该是零的外部库。 – Freddroid