원주율을 간단한 코딩을 통해 구해 보자.
C언어를 이용해 계산을 할 경우에, 원주율의 수치가 필요한 경우가 가끔 있다. 이럴 때 가장 간편한 방법은 define 을 이용해 파이의 변수와 값을 저장해 주는 것이다. 하지만 파이의 정의(수식을 이용한 원주율의 값)를 이용하여 원주율을 구할 수 있다.
원주율은 우리가 일상 생활에서는 파이 라고 간단히 쓰지만, 사실 무리수다. 즉, 정확한 값을 나타낼 수는 없고, 근삿값으로 계산할 수 밖에 없다. 주로 쓰는 원주율은 3.14라고 쓰기에도 충분하지만, 정확한 값을 요구하는 계산에선 더 정확한 값의 원주율을 요구할 수도 있다. 선대의 수학자들은 원주율을 무한급수 형태의 계산식을 통해 원주율을 구했다. 이 계산식을 이용해 원주율을 구해보자.
일단 여기서는 3가지 식을 다룰 것이다. 첫 번째는 라이프니츠의 공식, 두 번째는 월리스 공식, 세 번째는 오일러 곱셈 공식 이다. 1번부터 알아보자.
1. 라이프니츠의 공식
라이프니츠의 공식은 1/1-1/3+1/5.... 를 더한 것에 4를 곱한 것이다.
정확성을 위해서 100만번 정도 식을 반복해 주자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <stdio.h> //라이프니츠의 공식
int main()
{
double pi=0,temp=1,p=-1,num=1;
while(num<10000000)
{
p*=-1;
pi+=p*1.0/temp;
temp+=2;
num++;
}
printf("%.10f",4*pi);
}
|
cs |
2. 윌리스 공식
분자는 짝수가 계속 따라오고, 분모에는 홀수가 계속 따라온다. 둘은 서로 어긋난 상태로 반복이 된다.
이것도 마찬가지로 100만번 반복하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <stdio.h> //월리스 공식
int main()
{
double pi=1,even=2.0,odd=1.0;
int num=1;
while(num<10000000)
{
pi*=even/odd;
if(num%2==1) odd+=2;
else even+=2;
num++;
}
printf("%.10f",2.0*pi);
}
|
cs |
3. 오일러의 곱셈 공식
유명한 공식이다. 1부터 1씩 커지는 수의 역수를 더한 것은 원주율 제곱 나누기 6이 된다.
즉, 무한급수를 한 것에 6을 곱한다음, 그 수에 루트를 더하면 원주율이 나온다.
역시 100만번 반복하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <stdio.h> //오일러 곱셈 공식
#include <math.h>
int main()
{
double pi=0.0,num=1.0;
while(num<1000000)
{
pi+=1.0/pow(num,2.0);
num+=1.0;
}
printf("%.10f",sqrt(6*pi));
}
|
cs |
이번 포스트에선 원주율의 정의를 이용해 원주율의 값을 계산해 보았다. 배열을 이용하는 방법도 있으나, 간단히 double 형태의 수를 이용해 구해보았다.
double 의 정밀도가 원주율의 값을 계산해 보이기엔 분명히 한계가 존재한다. 하지만, 계산식을 이용해 원주율을 구하는 데 의의를 두면 좋을 것 같다고 생각한다.
사진 출저 : https://ko.wikipedia.org/wiki/%EC%9B%90%EC%A3%BC%EC%9C%A8
'프로그래밍 언어 > C C++' 카테고리의 다른 글
줄넘김 문자 endl , \n 차이 (0) | 2021.03.24 |
---|---|
gcc 를 이용해 c언어 간단히 컴파일하기 (0) | 2021.03.23 |
main 함수에 입력 변수 설정하기 (0) | 2021.03.03 |
c언어의 비트 연산 및 비트 연산자 (0) | 2019.04.30 |
C언어의 입력,출력 및 자료형 정리 (0) | 2019.02.10 |