원주율 계산하기

 
from decimal import Decimal, getcontext def calculate_pi(n): getcontext().prec = n + 1 # set precision pi = Decimal(0) k = 0 for i in range(n): pi += (Decimal(1) / (16**i)) * ( Decimal(4) / (8*k+1) - Decimal(2) / (8*k+4) - Decimal(1) / (8*k+5) - Decimal(1) / (8*k+6)) k += 1 return str(pi)[:n+1] n = int(input("Enter the number of digits of pi you want to calculate: ")) pi = calculate_pi(n) print(f"Pi upto {n} digits: {pi}")
 
BBP(Bailey–Borwein–Plouffe) 공식은 원주율의 특정 자리수를 계산하는 알고리즘 중 하나입니다.
이 공식은 다음과 같이 정의됩니다.
π = 1/16^0 [4/(8x0+1) - 2/(8x0+4) - 1/(8x0+5) - 1/(8x0+6)]
  • 1/16^1 [4/(8x1+1) - 2/(8x1+4) - 1/(8x1+5) - 1/(8x1+6)]
  • 1/16^2 [4/(8x2+1) - 2/(8x2+4) - 1/(8x2+5) - 1/(8x2+6)]
  • ...
여기서 x는 자연수입니다. 이 공식은 이진수, 십진수, 열여섯진수 등의 모든 진법에 적용될 수 있습니다. 그래서 원하는 자리수의 원주율을 얻기 위해서는 공식에 따라 적절한 x 값을 넣어 계산하면 됩니다.
BBP 공식은 매우 빠르고 정확하지만, 실제로는 매우 큰 자리수의 원주율을 구하기에는 여전히 많은 계산량이 필요합니다. 이 공식은 원주율 계산뿐 아니라, 수학 및 컴퓨터 과학 분야에서도 널리 사용되는 중요한 수식 중 하나입니다.