Math.pow(-27.0,1.0 / 3)返回NaN

时间:2018-10-03 03:45:49

标签: java pow

Math.pow(-27.0, 1.0/3)应该等效于cbrt(-27),而 返回-3。为什么pow返回NaN

这不是整数除法,也不是我,我想不出发生这种情况的原因。

3 个答案:

答案 0 :(得分:2)

根据OracleMath.pow(double,double)方法的特殊情况之一是:

  

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

Math.cbrt(double)之所以有效,是因为:

  

对于正有限x,cbrt(-x)== -cbrt(x);即,的立方根   负值是该值的立方根的负值   幅度

答案 1 :(得分:1)

它不会返回错误。我强烈建议您通读Math.pow(double, double) Javadoc中给出的规则。我会帮助第一个参数是有限的且小于零的 第二个参数是有限的而不是整数的,结果是NaN。

答案 2 :(得分:1)

您不能合理地采用-27的立方根,因为它是负数,这解释了math.pow返回NAN的原因。 Cbrt(-27)返回-3,因为它的工作原理略有不同:它取值的大小(在这种情况下,|| -27 || = 27),计算然后重新应用负数,得到-3。