일상 코딩
파이썬을 통한 라이프니츠 공식으로 파이 계산하기 본문
728x90
위의 식은 파이 계산을 위한 무한급수 라이프 니츠 공식(Leibniz Formula)이다. 이를 무한히 더하면 파이값을 가질 수 있게 된다.
이를 코드로 나타내면
import numpy as np
import time
def calculate_pi(n_terms:int) -> float:
upNum: float = 4.0
downNum: float = 1.0
multiNum: float = 1.0
pi: float = 0.0
start = time.time()
for _ in range(n_terms):
pi += multiNum * ( upNum / downNum )
downNum += 2.0
multiNum *= -1.0
end = time.time()
return pi, end-start
if __name__ == '__main__':
n = 10000000
print( calculate_pi( n ) )
print( 100*(calculate_pi(n)[0] / np.pi))
전체 코드 블록은 위와 같고,
중요한 함수 부분을 따로 놓고 보면
def calculate_pi(n_terms:int) -> float:
upNum: float = 4.0
downNum: float = 1.0
multiNum: float = 1.0
pi: float = 0.0
start = time.time()
for _ in range(n_terms):
pi += multiNum * ( upNum / downNum )
downNum += 2.0
multiNum *= -1.0
end = time.time()
return pi, end-start
upNum : 분자 4를 나타내고
downNum : 분모를 나타내며 특징은 2씩 커지는 것이다.
multiNum : 첫 항은 + 이지만 그 다음항은 -1이 곱해지는 것을 알 수 있다.
pi : 순차적으로 더한 값을 저장하는 변수이다.
for문을 보면.
for _ in range(n_terms):
pi += multiNum * ( upNum / downNum )
downNum += 2.0
multiNum *= -1.0
pi = multiNum* ( 분자 / 분모)을 계속해서 더하고
pi 변수에 저장하는 것을 알 수 있고,
합이 끝난 후
downNum(분모)에 2를 더한 것을 볼 수 있다.
또 그다음 단계로 -1.0을 곱한다.
이러한 과정을 n_terms 동안 for문을 계속 돌리는 식이고
start = time.time()
for _ in range(n_terms):
pi += multiNum * ( upNum / downNum )
downNum += 2.0
multiNum *= -1.0
end = time.time()
for문 위아래에 시간을 측정하여
어느 정도의 시간이 걸리는지도 알아봐서
컴퓨터 연산 능력도 알 수 있다.
return pi, end-start
if __name__ == '__main__':
n = 10000000
print( calculate_pi( n ) )
print( 100*(calculate_pi(n)[0] / np.pi))
numpy에 있는 pi 값과
for문을 돌려서 얻은 pi값을 비교하기 위해
위와 같이 썼고
return 값으로 튜플 형식을 반환하기에
첫 항인 pi 값만을 쓰기위해
[0]을 사용하였다.
728x90
'Python > 고전 컴퓨터 알고리즘' 카테고리의 다른 글
[python/파이썬] 미로찾기: DFS 깊이 우선 탐색 알고리즘 방법 적용 (0) | 2022.04.19 |
---|---|
[python/파이썬] 코딩테스트에서 많이 나오는 X,S,G,* 이용한 미로 만들기 maze.py (0) | 2022.04.19 |
파이썬 압축 알고리즘 DNA 시퀀스를 이용한 압축 알고리즘 (0) | 2021.01.30 |
파이썬 깨지지않는 암호화 OTP(One-Time-Pad) XOR 이용한 암호화 및 복호화 (0) | 2021.01.30 |
피보나치 수열 알고리즘 in 파이썬 python 고전 컴퓨터 알고리즘 (0) | 2021.01.22 |