e的近似值

e27180199990,精确到小数点后9位e \approx \frac{271801}{99990}, \quad \text{精确到小数点后9位}

e(π4+π5)1/6,精确到小数点后7位e \approx (\pi^4 + \pi^5)^{1/6}, \quad \text{精确到小数点后7位}

Is this the Coolest Approximation for e? 提到了一种用到了 123456789 的近似

e(1+946×7)3285,精确到小数点后18457734525360901453873570位e \approx (1+9^{-4^{6 \times 7}})^{3^{2^{85}}}, \quad \text{精确到小数点后18457734525360901453873570位}

ee 的定义出发

e=limn(1+1n)ne = \lim_{n\to\infty} \left(1+\frac{1}{n}\right)^n

上面近似中的大数字

946×7=9442=(32)(22)42=32859^{4^{6 \times 7}} = 9^{4^{42}} = (3^2)^{(2^2)^{42}} = 3^{2^{85}}

确实满足 ee 的定义式,近似很有道理,但是我想知道如何得到近似的精度。

判断这个数字精确到 ee 的小数点后几位

A=(1+1N)NA = \left(1+\frac{1}{N}\right)^N

lnA=Nln(1+1N)=N(1N12N2+13N3)=112N+13N2\begin{align} \ln A &= N \ln \left( 1 + \frac{1}{N} \right) \\ &= N \left( \frac{1}{N} - \frac{1}{2 N^2} + \frac{1}{3 N^3} - \cdots \right) \\ &= 1 - \frac{1}{2 N} + \frac{1}{3 N^2} - \cdots \end{align}

A=elnA=e112N+O(1N2)=e1e12NeO(1N2)A = e^{\ln A} = e^{1 - \frac{1}{2N} + O(\frac{1}{N^2})} = e^1 \cdot e^{-\frac{1}{2N}} \cdot e^{O(\frac{1}{N^2})}

再次利用 ex1+xe^x \approx 1+x 的近似:

Ae(112N)=ee2NA \approx e \left( 1 - \frac{1}{2N} \right) = e - \frac{e}{2N}

该近似值的绝对误差大约是 e2N\frac{e}{2N}

要确定“精确到小数点后多少位”,我们主要看误差项 1N\frac{1}{N} 的数量级。有效位数 DD 大约等于 NN 的以10为底的对数。

Dlog10(N)D \approx \log_{10}(N)

我们可以使用 Python 的 decimal 模块进行高精度计算:

1
2
3
4
5
6
7
8
9
10
import decimal

# 设置精度,足以容纳计算过程
decimal.getcontext().prec = 100

power_of_2 = decimal.Decimal(2) ** 85
log10_3 = decimal.Decimal(3).log10()
total_digits = power_of_2 * log10_3

print(f"{total_digits:.0f}")

可以得到

1
18457734525360901453873570

确实如此。