一位 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非常接近

    10-05 20:17