我一直认为1的任何幂等于1,但Math.pow(1, Infinity)
返回NaN。为什么不1?
答案 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