프로그래밍 언어/C C++

C언어로 계산식을 이용한 원주율(파이) 구하기

트리맨스 2019. 6. 3. 01:08
반응형

 

원주율을 간단한 코딩을 통해 구해 보자.


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

반응형