为什么Math.pow(1,Infinity)会返回NaN?

时间:2012-09-01 21:57:13

标签: javascript

我一直认为1的任何幂等于1,但Math.pow(1, Infinity)返回NaN。为什么不1?

4 个答案:

答案 0 :(得分:4)

这是一个数学问题,而不是Javascript问题,因此您使用数学解释,如下所示(http://mathforum.org/library/drmath/view/53372.html):

  

当你有“无限”这样的东西时,你必须意识到它是   不是数字。通常你的意思是某种限制过程。   所以,如果你有“1 ^ infinity”,你真正拥有的是某种限制:   基数不是真的1,但也许越来越接近1   而指数越来越大,就像(x + 1)^(1 / x)   如x-> 0 +。

     

问题是,发生得更快,基数接近   1或指数变大?要了解,请致电:

     

L = lim x-> 0的(x + 1)^(1 / x)

     

然后:

      L = lim x-> 0 of(1 / x)ln(x + 1)= lim x-> 0 of ln(x + 1)/ x

     

那是什么?当x-> 0时,它是0/0形式,所以取导数   顶部和底部。然后我们得到1 /(x + 1)/ 1的lim x-> 0,其= 1。   所以Ln = 1,L = e。酷!

     

这是真的吗?尝试插入一个很大的x值。或者认识到这一点   限制作为e的定义的变体。无论哪种方式,都是如此。该   limit是1 ^ infinity形式,但在这种情况下它是e,而不是1.尝试   在指数中使用(2 / x)重复工作,或者使用(1 / x ^ 2)或使用   1 /(sqrt(x)),看看它是如何改变答案的。

     

这就是为什么我们称之为不确定 - 所有那些不同版本的   限制接近1 ^无穷大,但最终的答案可能是任何   数字,例如1,或无穷大,或未定义。你需要做更多的工作   为了确定答案,所以1 ^无穷大本身尚未确定。   换句话说,1只是1 ^ infinity的答案之一。

“不确定”的答案不是数字。

答案 1 :(得分:2)

特别是对于JS,它在标准ECMAScript-262 5th Edition,第163页中定义:

  

如果abs(x)== 1且y为+∞,则结果为NaN

原因是无限只有极限才有意义。

所以

lim 1^x -> ∞
x->∞

但是1^∞未定义(对于编程语言。对于数学,它被定义并表示为限制)

答案 2 :(得分:1)

IEEE 754-2008定义: 1^(+-)Inf = +1

您使用的语言不符合标准。

答案 3 :(得分:1)

杰夫的回答很好,但它说:

  

当你有“无限”这样的东西时,你必须意识到它是   不是数字。通常你的意思是某种限制过程。   所以,如果你有“1 ^ infinity”,你真正拥有的是某种东西   限制:基数不是真的1,但越来越接近1   也许当指数变得越来越大,就像也许   (x + 1)^(1 / x)为x-> 0 +。

好吧,如果你有1^∞,当然指数不能正好是,因为它不是实数。但是基数可以一直是1。

然后,

lim   (x^y) = (1)^(∞) = ?? undefined ??
x->1
y->∞

但是

lim  (1^y) = 1^(∞) = 1
y->∞

(括号表示括号内的部分是收敛到该数字的序列,但不是那个数字)

然后,我认为如果Javascript有一个整数类型,Math.pow( (int)1, Infinity)应该给1

但事实是(https://stackoverflow.com/a/3605946/1529630

  

JavaScript中的所有数字都是64位浮点数。

然后,(http://en.wikipedia.org/wiki/Double-precision_floating-point_format),因为IEEE 754双精度二进制浮点数的有效位数为53位(52显式存储),

  

因此总精度为53位(大约16位十进制数,53 log10(2)≈15.955)

因此,当我们执行Math.pow(1,Infinity)时,1并非完全正确。{/ p>

然后,Math.pow(1,Infinity)NaN

是有道理的