円周率アルゴリズム(24,8,32)
解決したいこと
円周率を求めるコードがあるので、そのアルゴリズムを知りたい。
python ドキュメント > decimal モジュール > レシピ > pi()
では、 円周率を計算する、次のコードが紹介されています。
def pi():
"""Compute Pi to the current precision.
>>> print(pi())
3.141592653589793238462643383
"""
getcontext().prec += 2 # extra digits for intermediate steps
three = Decimal(3) # substitute "three=3.0" for regular floats
lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24
while s != lasts:
lasts = s
n, na = n+na, na+8
d, da = d+da, da+32
t = (t * n) / d
s += t
getcontext().prec -= 2
return +s # unary plus applies the new precision
このアルゴリズムの詳細についての解説が、ドキュメント内に見つかりませんでした。
これは、どのようなアルゴリズムなのでしょうか?
特に、 da
の初期値 24
, na
の増分 8
, da
の増分 32
はどこから来た数字なのでしょうか?