当a是负数而b是非整数时,为什么Math.pow(a,b)是NaN?

时间:2013-11-27 18:40:01

标签: javascript node.js

我观察到以下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) NaNMath.pow(4, -0.5) NaN

3 个答案:

答案 0 :(得分:5)

ImaginaryComplex)号码提醒!

我也有一个疯狂的结果。所以我在这里有不同编程语言中的相同逻辑。

我的感觉是,当计算功率时,得到的数字是-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)

这是由于数学原因。您的值将是一个虚数(复数),不受支持。 :)