컴퓨터/Python

Python (25) - 원주율(π)을 구해보자

달서비 2024. 8. 15. 23:10

우리가 도형에 대하여 계산이 필요한 경우 특히 원이나 포물선 등 곡선과 연관되면 원주율을 마주하게 됩니다. 파이썬에서 다양하게 원주율을 출력하는 방법들을 적어보려고 합니다.

파이 - pixabay

 

1. 모듈을 이용하는 방법 (math, numpy)

import math

v_pi = math.pi
print(v_pi) #3.141592653589793
import numpy as np

v_pi = np.pi
print(v_pi) #3.141592653589793

먼저 파이썬에 있는 모듈을 이용하는 방법입니다. 두 모듈은 수학 관련으로 자주 사용되는 모듈로 π가 상수로 저장되어 있습니다. 일반적인 수치 계산에서 충분하게 사용할 수 있습니다.

 

2. 수학적 공식을 이용하는 방법

2-1. 라이프니츠 급수 이용하는 방법

라이프니츠 급수

이미지 출처 : 위키피디아

π를 직접 구하는 여러 가지 공식이 있으나 대표적으로 사용되는 공식으로 라이프니츠 급수가 있습니다. 위 식에서 4를 곱하면 π 값을 얻을 수 있습니다. Python 코드로 표현하면 아래와 같은 코드로 나타낼 수 있습니다.

def calc_pi(n_terms):
    pi_result = 0
    for k in range(n_terms):
        pi_result += (-1) ** k / (2 * k + 1)
    return 4 * pi_result

pi_value = calc_pi(1000000)
print(pi_value) #3.1415916535897743

여기에서 결과는 실제 π 값과 오차를 가지고 있습니다.

결    과 : 3.1415916535897743

실제 값 : 3.1415926535897932

n_terms의 값이 무한대인 경우 π의 값이 더 정확해지지만, 무한히 많은 값을 사용할 수 없으므로 어느 정도 오차가 발생합니다.

 

2-2. BBP 공식을 활용하는 방법

BBP 공식

이미지 출처 : 위키피디아

BBP 공식은 1996년 데이빗 베일리는 피터 보어와인, 시몽 플루프와 공동으로 π에 관련된 새로운 무한급수입니다. 해당 공식은 π를 16진수로 계산하는 방법 하나로, 특정 자리까지의 값을 직접 계산할 수 있습니다.

공식을 이용하여 소수점 100자리까지 구하는 Python 코드는 다음과 같습니다:

import decimal
from decimal import Decimal, getcontext

# 소수점 이하 100자리 설정
getcontext().prec = 102  # 계산 과정에서 오차를 줄이기 위해 약간 더 크게 설정

# Bailey–Borwein–Plouffe (BBP) 공식 사용
def calc_pi():
    pi = Decimal(0)
    exp_16 = Decimal(1)  # 16^0 초기값은 1
    for k in range(100):
        pi += exp_16 * (
            Decimal(4) / (8*k + 1) - 
            Decimal(2) / (8*k + 4) - 
            Decimal(1) / (8*k + 5) - 
            Decimal(1) / (8*k + 6)
        )
        exp_16 /= Decimal(16)  # 16^k를 다음 단계의 16^(k+1)로 업데이트
    return pi

pi_value = calc_pi()

# 소수점 이하 100자리까지 출력
print(f"{pi_value:.100f}")
#3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170680

 

인프라의 한계

우리가 일반적으로 1억 이상 큰 수를 구한다고 한다면 가정용 컴퓨터의 사양으로 계산하기에 한계가 있습니다. 복잡한 수학적 알고리즘이나 높은 정밀도의 π 값을 계산할 때는 컴퓨터의 성능이 중요합니다. 많은 자리까지 정확히 계산하기 위해서는 클라우드 환경의 클러스터 PC나 GPU를 활용하는 것이 필요할 수 있습니다. 이러한 작업은 계산 자원이 많이 소모되므로, 효율적인 알고리즘 선택과 자원 관리 또한 중요합니다.

 

마지막으로

최근에 일반 사용자도 10억 이상의 파이값을 출력하는 것이 가능하냐고 생각을 하고 테스트를 해보고 있습니다. 나중에 완성된다면 해당 이야기도 풀어보려고 합니다.

 

도움이 된 게시글

https://post.naver.com/viewer/postView.nhn?volumeNo=28129380&memberNo=5565159

 

슈퍼컴퓨터는 원주율(π)을 어떻게 50조 자리까지 계산할까?

[BY LG상남도서관] 슈퍼컴퓨터의 성능(속도)을 평가하는 방법 중 하나가 원주율(π)을 최대 몇 자리까지 ...

m.post.naver.com

 

https://m.dongascience.com/news.php?idx=58906

 

[주말N수학] 원주율에 '진심'인 사람들...소수점 100조 자리까지 계산

Lismore Comprehensive school 세계 수학의 날인 3월 14일이면 전 세계 사람들이 원주율을 기념합니다. 세계 어딘가에는 원주율에 푹 빠져 원주율을 수조 자리까지 계산하거나 7만 자리까지 외우는 사람

m.dongascience.com

 

https://wiki.mathnt.net/index.php?title=%EC%9B%90%EC%A3%BC%EC%9C%A8(%ED%8C%8C%EC%9D%B4,%CF%80)

 

원주율(파이,π) - 수학노트

개요 원주율(파이,π)는 원의 둘레와 지름의 비율 모든 원은 서로 닮음이므로, 이 비율은 상수이다 \(\pi=3.141592653589793238462643383279502884197169399375\cdots\) 수학의 수많은 곳에서 등장한다 표기법의 역

wiki.mathnt.net