MathWorld page为e
提供了一个简单的数字公式,据称对于前10 ^ 25位数字是正确的。它指出e
大约是
(1 + 9^-4^(7*6))^3^2^85
任何想法如何检查这个公式是否正确,即使是前10位数? 这是写右手边的另一种方式
Power[Plus[1, Power[9, Times[-1, Power[4, Times[7, 6]]]]], Power[3, Power[2, 85]]]
答案 0 :(得分:9)
这个问题根本不需要Mathematica。首先,很容易证明9^(4^(7*6))
完全等于3^2^85
,因为
9^(4^(7*6)) = 3^(2*4^(7*6)) = 3^(2^(1+2*(7*6))) = 3^2^85
然后,我们知道表示e
的方法之一是作为限制
e = lim (1+1/n)^n, n->infinity
唯一的问题是n
是非常大但有限的错误是什么。我们有
(1+1/n)^n = e^log((1+1/n)^n) = e^(n*log(1+1/n)) = e^(1-1/(2n)+O(1/n^2)) = e + O(1/n),
鉴于n = 3^2^85
,我们接受log(10,n) = 2^85 log(10,3) ~ 1.85 *10^25
,我们得到一个估计值
类似于引用的
答案 1 :(得分:1)
反复采用日志对于这类问题来说是一种很好的(通常)通用的解决方案。这是针对这个问题的一种更特殊的方法:回想起e = lim(n->无穷大,(1 + 1 / n)^ n)。所以我们需要的是9 ^(4 ^(42))(小数部分的分母)足够接近3 ^(2 ^ 85)和大。
在这种情况下,它们是相同的,所以我们有n = 3 ^(2 ^ 85),并且它将是对e的非常好的近似。这些都是大数字,但并非不可行:
>>> from mpmath import *
>>> iv.dps = 50 # let's use interval arithmetic, just for fun
>>> x = mpi(9)**(-(4**(42)))
>>> up = (mpi(3)**(2**85))
>>> x
mpi('1.4846305545498656772753385085652043615636250118238876e-18457734525360901453873570',
'1.4846305545498656772753385085652043615636250118238899e-18457734525360901453873570')
>>> 1/x
mpi('6.7356824695231749871315222528985858700759934154677854e+18457734525360901453873569',
'6.7356824695231749871315222528985858700759934154678156e+18457734525360901453873569')
>>> up
mpi('6.7356824695231749871315222528985858700759934154678005e+18457734525360901453873569',
'6.7356824695231749871315222528985858700759934154678156e+18457734525360901453873569')
>>> 0 in (1/x-up)
True
确定e上的确切误差范围是留给读者的练习;-) - 提示:比较mathworld页面声称的精确位数和上述数字,并问为什么会这样,思考近似系列(1 + 1/1)^ 1,(1 + 1/2)^ 2等