定义式收敛非常慢,无法直接用于计算。
查询Sympy中关于该常数的源代码,使用的是所谓Brent-McMillan公式:
其中,,误差界大约是,收敛非常快。
不过Sympy中封装了一层十进制与二进制之间的精度转换控制,计算比较繁琐,因而此处的代码改写自此页面的Mathematica代码,使用的公式相同。
最终代码有七行。
代码长度:165字节 vs. 全站第一:81字节。
from decimal import*
getcontext().prec,d=1002,Decimal
n=d(999)
a=u=-d(n).ln()
b=v=i=d(1)
while i<2900:k=(n/i)**2;a*=k;b*=k;a+=b/i;u+=a;v+=b;i+=1
print(str(u/v)[:-2])
|