嗨,我在一段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代码中,操作顺序不是很明确

谢谢

最佳答案

正如the Javadoc for Math.pow解释的那样:


  如果第一个参数是有限的且小于零[…and],第二个参数是有限的而不是整数,则结果为NaN。


因此,只要y足够大而1 - (Math.pow(6.875, -6) * y为负数,您就会得到NaN。

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



编辑更新的问题:

您的基本代码具有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

08-06 20:45