Friday, November 10, 2006
C언어] 원주율(PI) 계산 소스; 소수점 이하 799 자리까지 파이 값 구하기
원주율 계산 소스가 별로 많지 않더군요. 위키를 뒤져보다가 다음과 같은 소스를 발견했습니다.
Original Source:
< Digits of pi calculation - CodeCodex >
www.codecodex.com/wiki/index.php?title=Digits_of_pi_calculation
(2024-06-02: 현재 폐쇄됨)
소스 파일명: 0.cpp
컴파일 및 실행 결과:
소수점 이하 799자리까지 정확하게 출력되었습니다. (소수점 제외하고) 정수부의 3까지 포함하면 800자리가 됩니다.
그런데 위의 결과에서는
3141592...
이렇게 소수점이 나오지 않았습니다.
그래서 위의 값을 실제 사용할 때에는
3.141592...
이렇게 점을 찍어서 사용해야 합니다.
참고:
< 원주율 - 위키백과 >
< Pi - Wikipedia >
프로그래밍 언어에는 PI 근사값 상수가 이미 정의되어 있기에, 대부분의 경우 그 상수를 사용하면 됩니다: ▶▶ C언어] 원주율(PI;파이) 근사값 상수, M_PI 출력 예제
Original Source:
< Digits of pi calculation - CodeCodex >
www.codecodex.com/wiki/index.php?title=Digits_of_pi_calculation
(2024-06-02: 현재 폐쇄됨)
원주율(파이 값) 소수점 799자리까지 구하는 예제
소스 파일명: 0.cpp
#include <stdio.h>
#define SCALE 10000
#define MAX_ARRAY 2800
#define ARRAY_INIT 2000
int main(void) {
int i, j, sum, carry = 0;
int array[MAX_ARRAY + 1];
for (i = 0; i <= MAX_ARRAY; ++i) array[i] = ARRAY_INIT; // array 배열 초기화
for (i = MAX_ARRAY; i; i -= 14) {
sum = 0;
for (j = i; j > 0; --j) {
sum = sum * j + SCALE * array[j];
array[j] = sum % (j * 2 - 1);
sum /= (j * 2 - 1);
}
printf("%04d", carry + sum / SCALE);
carry = sum % SCALE;
}
return 0;
}
#define SCALE 10000
#define MAX_ARRAY 2800
#define ARRAY_INIT 2000
int main(void) {
int i, j, sum, carry = 0;
int array[MAX_ARRAY + 1];
for (i = 0; i <= MAX_ARRAY; ++i) array[i] = ARRAY_INIT; // array 배열 초기화
for (i = MAX_ARRAY; i; i -= 14) {
sum = 0;
for (j = i; j > 0; --j) {
sum = sum * j + SCALE * array[j];
array[j] = sum % (j * 2 - 1);
sum /= (j * 2 - 1);
}
printf("%04d", carry + sum / SCALE);
carry = sum % SCALE;
}
return 0;
}
컴파일 및 실행 결과:
D:\Z>cl 0.cpp && 0.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
0.cpp
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
/out:0.exe
0.obj
31415926535897932384626433832795028841971693993751058209749445923078164062862089
98628034825342117067982148086513282306647093844609550582231725359408128481117450
28410270193852110555964462294895493038196442881097566593344612847564823378678316
52712019091456485669234603486104543266482133936072602491412737245870066063155881
74881520920962829254091715364367892590360011330530548820466521384146951941511609
43305727036575959195309218611738193261179310511854807446237996274956735188575272
48912279381830119491298336733624406566430860213949463952247371907021798609437027
70539217176293176752384674818467669405132000568127145263560827785771342757789609
17363717872146844090122495343014654958537105079227968925892354201995611212902196
08640344181598136297747713099605187072113499999983729780499510597317328160963185
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
0.cpp
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
/out:0.exe
0.obj
31415926535897932384626433832795028841971693993751058209749445923078164062862089
98628034825342117067982148086513282306647093844609550582231725359408128481117450
28410270193852110555964462294895493038196442881097566593344612847564823378678316
52712019091456485669234603486104543266482133936072602491412737245870066063155881
74881520920962829254091715364367892590360011330530548820466521384146951941511609
43305727036575959195309218611738193261179310511854807446237996274956735188575272
48912279381830119491298336733624406566430860213949463952247371907021798609437027
70539217176293176752384674818467669405132000568127145263560827785771342757789609
17363717872146844090122495343014654958537105079227968925892354201995611212902196
08640344181598136297747713099605187072113499999983729780499510597317328160963185
소수점 이하 799자리까지 정확하게 출력되었습니다. (소수점 제외하고) 정수부의 3까지 포함하면 800자리가 됩니다.
그런데 위의 결과에서는
3141592...
이렇게 소수점이 나오지 않았습니다.
그래서 위의 값을 실제 사용할 때에는
3.141592...
이렇게 점을 찍어서 사용해야 합니다.
참고:
< 원주율 - 위키백과 >
< Pi - Wikipedia >
프로그래밍 언어에는 PI 근사값 상수가 이미 정의되어 있기에, 대부분의 경우 그 상수를 사용하면 됩니다: ▶▶ C언어] 원주율(PI;파이) 근사값 상수, M_PI 출력 예제
tag: cpp
C언어 | C/C++ (Visual C++)
ㄳㄳ.
소숫점 20000자리까지 성공시켰어욤.
코드좀 주실 수 있나요? 나니면 원리라도 ㅠㅠ
<< Home