0

嗨,我在一段 java 代码中有以下等式:

double z = 0.002378 * (Math.pow((1 - (Math.pow(6.875, -6) * y)), 4.2561));

当我将 y 设置为非常大的值时,即200000我得到Nan(不是数字)它在稍低的值下工作正常,130000

谁能告诉我这是为什么?

此外,我尝试从原始 BASIC 程序中移植上述代码:

.002378*(1-(6.875*10^-6*ALT))^4.2561

我可能做错了吗?BASIC 代码中的操作顺序不是很明确

谢谢

4

3 回答 3

3

正如Javadoc forMath.pow解释的那样:

如果第一个参数是有限的并且小于零 [... 并且] 第二个参数是有限的而不是整数,那么结果是 NaN。

因此,只要你y足够好,那1 - (Math.pow(6.875, -6) * y是负数,你就会得到 NaN。

(当您考虑基础数学时,这是有道理的。非整数幂的负数不是实数,并且double无法表示复数。)


编辑更新的问题:

您的 Basic 代码有6.875*10^-6(意思是 6.875 × 10 -6),但是您的 Java 代码有Math.pow(6.875, -6)(意思是 6.875 -6),这是一个更大的值,所以您的 Java 代码会触发这个问题,因为y. 这可能就是您现在看到此问题的原因。要匹配基本代码,您应该更改Math.pow(6.875, -6)6.875e-6.

于 2013-03-17T16:23:20.330 回答
0

将负数提高到非整数幂会导致复数数学中的虚数,Java 算术中的 NaN。如果你真的需要做那个计算,你需要一个复数包。但是,您的方程式更有可能存在错误,或者您试图在其有效范围之外使用它。

于 2013-03-17T16:24:15.867 回答
0

具有实数幂的负数可能会得到 NAN

于 2013-03-17T16:26:08.343 回答