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. Это скажет вам, где дела идут с рельсов. Вы почти наверняка переполнены где-то, но мы не можем видеть числа, с которыми вы работаете, поэтому я не могу сказать вам, где именно.
Мое (образованное) предположение, что нан уже направлен, потому что он будет неопределенным, когда модуль будет нулевым