컴퓨터 / Computer

π 쉽고 편하게 계산하는 공식

파이공식 20 86 07.17 14:30

 π = 3.1415926535897932384626XXX......

4 - 4/3 + 4/5 - 4/7 + 2/8
= 4 - 1.333333...... + 0.8 - 0.571428...... + 0.25
= 3.1452380952XXX......

- 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + 2/12
= 3.1427128427XXX......

4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + 4/13 - 4/15 + 4/17 - 4/19 + 2/20
3.1418396189XXX......

일반적으로,
1 3 5 7 9 11 13 15 17 19 ......  홀수에서
1 5 9 13 17 21 ...... 을 홀수번째홀수
3 7 11 15 19 ....... 를 짝수번째홀수라고 하면,

4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + ...... + 4/홀수번째홀수 - 4/짝수번째홀수 + ...... 

+ 4/홀수번째홀수 - 4/(그다음홀수인짝수번째홀수) + 2/(그다음수인짝수)
꼴의 식은 길어짐에 따라 원래 라이프니츠 급수보다 훨씬 빠르게 원주율에 수렴합니다.

Comments

파이공식 07.17 14:51
j = 0
for i in range(1, 10000001):
    if i % 2 == 1:
        j += 4/(2*i-1)
    else:
        j -= 4/(2*i-1)
j += 2/(2*10000000)
print(j)

3.1415926535897913
MX세대 07.17 15:31
몇자리까지 가능한가요?
파이공식 07.17 15:56
한없이 원주율의 참값에 수렴하는 공식이나, 분모가 3의 배수 등인 무한소수를 절사해서 계산하면, 그 오차의 영향을 받습니다.
j = 0
for i in range(0, 10000000):
    if i % 2 == 1:
        j += 4/(2*(10000000-i)-1)
    else:
        j -= 4/(2*(10000000-i)-1)
j += 2/(2*10000000)
print(j)


실제로 거꾸로 계산하면 3.141592653589793으로 절사 오차가 작아집니다!
파이공식 07.17 15:57
1천만항 정도 계산하면, 거의 머신 프리시전까지는 올라가는 것으로 보입니다.
파이공식 07.17 16:01
N 자릿수에 필요한 연산량은 대략 10^(세제곱근 N)으로, 사실 20자리 초과를 얻기에는 매우 비효율적인 알고리즘이나,
15자리까지의 데모에는 매우 간결한 수식입니다. (라이프니츠는 6 자리 얻는것도 골이 아픕니다.)
MX세대 07.17 16:07
대단하네요!
Sha_bler 07.17 16:10
일반 컴퓨터에서는 어디까지 가능할까요? 램 16기가로 했을때.
아찌들 07.17 16:10
와 ~ 놀랬어요
파이공식 07.17 17:20
홀수번째홀수, 짝수번째홀수, 그다음짝수 같은 표현이 4n-3, 4n-1, 4n같은 표현보다 더 직감적으로 와 닿아서 원주율이 더 잘 이해가 되셨길 소망합니다.
파이공식 07.17 16:25
j = 0
for i in range(1, 1000000001):
    if i % 2 == 1:
        j += 40000000000000000000000000000000000000000//(2*i-1)
    else:
        j -= 40000000000000000000000000000000000000000//(2*i-1)
    if i % 100000000 == 0:
        print(f"{i//10000000}%, {j}")
j += 20000000000000000000000000000000000000000//(2*1000000000)
print(j)

십억항 (짝수분모를 가진 분수 합산까지 포함하면 10억 1항) 계산 결과입니다.

10%, 31415926435897932384626436332795028837320 : 1억항
20%, 31415926485897932384626434145295028835903 : 2억항
30%, 31415926502564599051293100592054288095099 : 3억항
40%, 31415926510897932384626433871857528836019 : 4억항
50%, 31415926515897932384626433852795028832990 : 5억항
60%, 31415926519231265717959767177702436237921 : 6억항
70%, 31415926521612218098912148125797944280340 : 7억항
80%, 31415926523397932384626433837677841324720 : 8억항
90%, 31415926524786821273515322725113272994147 : 9억항
100%, 31415926525897932384626433835295028819736 : 십억항
31415926535897932384626433835295028819736 : 십억일항 (단순 라이프니츠 교대급수에서 +2/2000000000 보정)
파이공식 07.17 16:30
저는 이거 ASUS Zenbook OLED 15에서 했더니 약 10분 정도 걸렸습니다.
장치 이름 {비공개}
프로세서 AMD Ryzen 7 7735U with Radeon Graphics (2.70 GHz)
설치된 RAM 16.0GB(15.2GB 사용 가능)
그래픽 카드 AMD Radeon (TM) Graphics (486 MB)
저장소 477 GB 중 462 GB이(가) 사용됨
장치 ID {비공개}
제품 ID {비공개}
시스템 종류 64비트 운영 체제, x64 기반 프로세서
펜 및 터치 이 디스플레이에 사용할 수 있는 펜 또는 터치식 입력이 없습니다.
Sha_bler 07.17 16:33
우와. 16기가에서도 10분이라니.
파이공식 07.17 16:39
Python IDLE Environment라서 그런가 봅니다. 비단뱀~
Sha_bler 07.17 16:41
그 놈이 은근히 메모리 많이 먹어요.  아예 C 코드가 더 나을 듯.
KPOPLOVE 07.17 16:43
GPU 가능한 노트북인가요? GPU 쓰면 더 많이 나올듯 한데요.
MX세대 07.17 17:01
파이썬 쓰셨다면 math.pi 안 쓰시고 저렇개 하신 이유가 궁금합니다.
파이공식 07.17 17:09
ㅎㅎㅎㅎㅎㅎ 저는 단순한 공식으로 pi값을 "계산"하려고 기존의 라이프니츠 공식을 수정한(짝수분모인 분수 플러스) 겁니다.
MX세대 07.17 17:35
기계혹사자시군요.  존경합니다!
떠돌이 07.17 20:00
기본에 입각한 접근이라니. 정석이군요.
토마스 07.17 23:47
우와.  상상도 못했는데. 대단하시네요.

미니특공대 파이어캅 시즌6 최강경찰 변신 로봇 장난감 남아 생일 선물
칠성상회
UNP UL-4206OD 10매 전산라벨OD 카세트 테이프 용
바이플러스
UNP UL-313-2RD 하트 스티커 빨강 14_13mm
바이플러스
근영사 고급 이중봉투 무지 50매 10X22cm
바이플러스