2015-11-17 3 views
2

Я пишу 3D-игру с использованием OpenGL в D, и у меня возникают проблемы с плавающими точками. Когда я делю нуль с другим значением float (ноль), он всегда будет NaN, а не 0. Это вызывает проблемы, которые NaN будет распространять по всему коду, все остальное, которое делится/умножается на него, также становится NaN. Я действительно не хочу обертывать все мои подразделения с помощью проверки if value != 0.0f.Предотвращение NaN при делении нуля со значением

Простая проверка как float value = getCurrentSpeed()/getMaxSpeed() вернет NaN, если getCurrentSpeed() return 0.0f.

ответ

1

При делении, скажем 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() являются нули и вы должны проверить getMaxSpeed() для того 0

+0

кажется, что проблема происхождения находится во внешнем библиотеке, где длина вектора вычисляется в NaN, когда он должен быть равен нулю. – Freddroid