一位 friend 告诉我(至少在google chrome控制台中),以下语句显示为true:
1/Math.pow(0.9999999999999999, Number.MAX_SAFE_INTEGER) === Math.E
实际上,
1/Math.pow(0.9999999999999999, Number.MAX_SAFE_INTEGER)
是2.718281828459045
。这不是巧合吗?
有人可以解释一下幕后制作这项工作的方式吗?
根据wolfram alpha,正确的值应该近似为
1/0.40628
,近似为2.4613566998129373
-与Math.E
相差很远。 (我假设Wolframalpha的计算比javascript更精确,但我可能是错的)。任何解释将不胜感激。
奖励:我想知道该表达式的真正近似数学值是多少?
我找到了这个:
n = 0.0000000000000001
(1 - n)^MAX_INT = 1 + (MAX_INT choose 2) * n + (MAX_INT choose 3) * n^2 + ... + n^MAX_INT
但我不知道该如何估算。
我在wolfram alpha中测试了上面的表达式,并得到了
2.46
。 最佳答案
这来自the original characterisation of e as:
然后使用以下属性:
MAX_SAFE_INTEGER
= 253-1和0.9999999999999999
舍入为1-2-53 然后
1/(1-2-53)= 1 + 2-53/(1-2-53)= 1 + 1/(253-1)
所以,
1/(1-2-53)253-1 = [1 + 1/(253-1)] 253-1
与e非常接近