/*
 * -------------------------------------
 *     몬테카를로법에 의한 π 계산    *
 * -------------------------------------
 */

 

#include <stdio.h>
#include <stdlib.h>

#define NUM 1000

 

double rnd(void);

int main(void)
{
    double x, y, pai;
    int i,in=0;

    for (i=1; i<=NUM; i++){
        x=rnd();
        y=rnd();
        if (x*x+y*y<=1)
            in++;
    }
    pai=(double)4*in/NUM;
    printf("π값 = %f\n", pai);

    return 0;
}

double rnd(void)        /* 0 ~ 1 사이의 난수 */
{
    return (double)rand()/RAND_MAX;     // 0 ~ 1사이의 난수를 발생 시킨다.
}

 

//  몬테카를로법을 이용해서 PI값을 구한다. 0~1사이의 실수형 난수를 두 개 발생시킨후

이를 x, y라고 하자. 이러한 난수쌍을 어는 정도 발생시키면 1*1크기의 정사각형에 (x, y)로 표시

되는 점이 균일하게 흩뿌려진다. 따라서 정사각형의 면적과 1/4원 면적비는 흩뿌려진 난수의 개수

에 비례한다고 할 수 있다.

 

//  num을 1000으로 설정 해주었기 때문에 그다지 정확하지 않다. 값의 정확도는 난수 발생 횟수의

증가와  rnd()에 의해 발생하는 난수가 얼마나 균일하게 퍼지는지에 따라 크게 달라진다.

+ Recent posts