有 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;

这又给了我一个错误


共 (2) 个答案

  1. # 1 楼答案

    在第一种情况下,第二个值乘以时间

    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 overflow,您可以获得双倍的魔法值。正无穷大或双精度。负无穷大

    最有可能的情况是,你的时间是双倍的。正无穷大或双精度。负无穷大,结果为NAN

    将计算更改为一系列步骤。在每个步骤中,通过查找Double来检查结果是否溢出。正无穷大或双精度。负无穷大。这会告诉你事情的发展方向。你几乎肯定是在某处溢出,但我们看不到你处理的数字,所以我不能告诉你确切的位置

  2. # 2 楼答案

    我(受过教育的)猜测是nan已经在这个方向上了,因为当模块为零时,它将是不确定的