/*
* -------------------------------------
* 몬테카를로법에 의한 π 계산 *
* -------------------------------------
*/
#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()에 의해 발생하는 난수가 얼마나 균일하게 퍼지는지에 따라 크게 달라진다.