NaN ошибка JAVA при умножении на 0

Я действительно не могу понять, почему это выражение дает мне ошибку NaN, только когда

acceleration.module - Ambient.friction = 0

:

double x = (speed.module * speed.direction.x()) + ((acceleration.module-Ambient.friction) * acceleration.direction.x())*time;

Более того, если я добавлю такой фарентез:

double x = ((speed.module * speed.direction.x()) + ((acceleration.module-Ambient.friction) * acceleration.direction.x()))*time;

это снова дает мне ошибку NaN.

2 ответа

Решение

В первом второе значение умножается на время.

double x = (speed.module * speed.direction.x()) + ((acceleration.module-Ambient.friction) * acceleration.direction.x())*time;

С другой стороны, все это умножается на время:

double x = ((speed.module * speed.direction.x()) + ((acceleration.module-Ambient.friction) * acceleration.direction.x()))*time;

Это заставляет меня думать, что вы переполняете двойные значения во втором, прежде чем вы умножаетесь со временем. С двойным переполнением вы получаете магические значения Double.POSITIVE_INFINITY или Double.NEGATIVE_INFINITY

Скорее всего, вы умножаете время на Double.POSITIVE_INFINITY или Double.NEGATIVE_INFINITY, и в результате получается NAN.

Измените расчеты на ряд шагов. На каждом шаге проверяйте результат на переполнение, ища Double.POSITIVE_INFINITY или Double.NEGATIVE_INFINITY. Это скажет вам, где дела идут с рельсов. Вы почти наверняка переполнены где-то, но мы не можем видеть числа, с которыми вы работаете, поэтому я не могу сказать вам, где именно.

Мое (образованное) предположение, что нан уже направлен, потому что он будет неопределенным, когда модуль будет нулевым

Другие вопросы по тегам