Math.pow(-27.0, 1.0/3)
应该等效于cbrt(-27)
,而 返回-3。为什么pow
返回NaN
?
这不是整数除法,也不是我,我想不出发生这种情况的原因。
答案 0 :(得分:2)
根据Oracle,Math.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。