2015-11-17 102 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