我观察到以下Javascript行为:
> Math.pow(4, 2)
16
> Math.pow(4, 2.1)
18.37917367995256
> Math.pow(4, 0.5)
2
> Math.pow(-4, 2)
16
> Math.pow(-4, 2.1)
NaN
> Math.pow(-4, 0.5)
NaN
为什么给出一个负数和一个非整数但有理数的数字会使Math.pow
返回NaN
?
例如,为什么Math.pow(4, 0.5)
不 NaN
但Math.pow(4, -0.5)
NaN
?
答案 0 :(得分:5)
我也有一个疯狂的结果。所以我在这里有不同编程语言中的相同逻辑。
我的感觉是,当计算功率时,得到的数字是-1的根,这是虚数。这些程序无法处理想象的数字是我的猜测。
结果如下:
<强> C#强>
Math.Pow(-1.1, -1.1); // Returns NaN
Java Output
Math.pow(-4, 2.1); // Returns NaN
<强>的JavaScript 强>
Math.pow(-4, 2.1); // Returns NaN
答案 1 :(得分:4)
因为你试图计算一个不真实的数字。例如,没有实数是-4到0.5的幂的解。因此,来自 IMAGINARY NUMBERS 的世界。
当你看到ECMAscript specification似乎这么说时,你会得到最好的答案。
返回将x提升到幂y的结果的依赖于实现的近似值。
15.8.2.13 pow(x,y)#ⓉⓇ
- 如果y为NaN,则结果为NaN。
- 如果y为+0,则结果为1,即使x为NaN。
- 如果y为-0,则结果为1,即使x为NaN。
- 如果x是NaN且y非零,则结果为NaN。
- 如果abs(x)> 1且y为+∞,则结果为+∞。
- 如果abs(x)> 1且y为-∞,则结果为+0。
- 如果abs(x)== 1且y为+∞,则结果为NaN。
- 如果abs(x)== 1且y为-∞,则结果为NaN。
- 如果abs(x)<1且y为+∞,则结果为+0。
- 如果abs(x)<1且y为-∞,则结果为+∞。
- 如果x&lt; 0和x是有限的,y是有限的,y不是整数, 结果是NaN。
.......................
答案 2 :(得分:0)
这是由于数学原因。您的值将是一个虚数(复数),不受支持。 :)