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

Ion*_*zău 5 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
Run Code Online (Sandbox Code Playgroud)

为什么给出一个负数和一个非整数但有理数的数字会让人Math.pow回归NaN

例如,为什么Math.pow(4, 0.5)不是 NaN,但Math.pow(4, -0.5) 就是 NaN

Pra*_*man 5

虚构(复杂)号码警报!

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

我的感觉是,当计算功率时,得到的数字是-1的根,这是一个虚数.这些程序无法处理虚数是我的猜测.


结果如下:

C#

Math.Pow(-1.1, -1.1);    // Returns NaN
Run Code Online (Sandbox Code Playgroud)

Java 输出

Math.pow(-4, 2.1);      // Returns NaN
Run Code Online (Sandbox Code Playgroud)

JavaScript的

Math.pow(-4, 2.1);      // Returns NaN
Run Code Online (Sandbox Code Playgroud)


Rah*_*thi 5

因为你试图计算一个不真实的数字。例如,没有实数是 -4 的 0.5 次方的解。于是虚数的世界就出现了。

\n\n

当您看到ECMAscript 规范似乎是这么说时,您将得到最好的答案。

\n\n

返回 x 的 y 次方结果的依赖于实现的近似值。

\n\n
\n

15.8.2.13 pow(x,y)#\xe2\x93\x89\xe2\x93\x87

\n\n
    \n
  • 如果 y 为 NaN,则结果为 NaN。
  • \n
  • 如果 y 为 +0,即使 x 为 NaN,结果也为 1。
  • \n
  • 如果 y 为 \xe2\x88\x920,即使 x 为 NaN,结果也为 1。
  • \n
  • 如果 x 为 NaN 并且 y 非零,则结果为 NaN。
  • \n
  • 如果abs(x)>1且y为+\xe2\x88\x9e,则结果为+\xe2\x88\x9e。
  • \n
  • 如果abs(x)>1且y为\xe2\x88\x92\xe2\x88\x9e,则结果为+0。
  • \n
  • 如果 abs(x)==1 且 y 为 +\xe2\x88\x9e,则结果为 NaN。
  • \n
  • 如果 abs(x)==1 且 y 为 \xe2\x88\x92\xe2\x88\x9e,则结果为 NaN。
  • \n
  • 如果abs(x)<1且y为+\xe2\x88\x9e,则结果为+0。
  • \n
  • 如果 abs(x)<1 且 y 为 \xe2\x88\x92\xe2\x88\x9e,则结果为 +\xe2\x88\x9e。
  • \n
  • 如果 x < 0 且 x 是有限的且 y 是有限的且 y 不是整数,则结果为 NaN。
  • \n
\n\n

......................

\n
\n