Chudnovsky 알고리즘은 원주율 π를 매우 빠르게 계산하는 알고리즘이다. 항 하나를 더할 때마다 약 14자리 정도의 정확도가 증가한다.
from decimal import Decimal, getcontext
getcontext().prec = 110
def pi():
C = 426880 * Decimal(10005).sqrt()
M = 1
L = 13591409
X = 1
K = 6
S = L
for i in range(1, 10):
M = (M * (K**3 - 16*K)) // (i**3)
L += 545140134
X *= -262537412640768000
S += Decimal(M * L) / X
K += 12
return C / S
print(pi())
| 변수 | 의미 |
|---|---|
| C | 426880√10005 값 |
| M | 팩토리얼 계수 부분 |
| L | 13591409 + 545140134k 부분 |
| X | 큰 거듭제곱 분모 부분 |
| S | 급수의 합 |
| K | M을 빠르게 갱신하기 위한 보조 변수 |
3.14159265358979323846264338327950288419716939937510
58209749445923078164062862089986280348253421170679
Chudnovsky 알고리즘은 느리게 수렴하는 바젤 문제 방식보다 훨씬 빠르다. 따라서 원주율을 소수점 이하 100자리, 1000자리, 10000자리 이상 계산할 때 적합하다.