嗨,我在一段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
。