半径1の円を四分割し、その中の一つを直径1の正方形で囲んだとする。
その一つの正方形の中にN個の点を打ち、その中で円の中にある点をnとし、
N個の点の数をプログラム中ではmaxとしています。
円の面積はS(つまりπ)、正方形の面積は1となるので次式で
max:n=1:S
S=max/n
となる。点の比によって円周率を求めるプログラムになっています。
私がわからない部分ですが、円の中に点があるかどうか判断する部分です。
これはどういった公式を使っているのでしょうか?
プログラム中ではこの部分です。下に全体のプログラムを載せます。
if((x*x+y*y)<=1.0)
n++;
全体のプログラムを載せます。
//モンテカルロ法を用いた円周率の計算
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(void)
{
double i,n=0.0,max=100.0;
double x,y,pai;
for(i=0;i<=max;i++){
x=rand()/(RAND_MAX+1.0);
y=rand()/(RAND_MAX+1.0);
if((x*x+y*y)<=1.0) ←この部分
n++;
}
pai=n/max*4.0;
fprintf(stdout,"%.10f\n",pai);
fprintf(stdout,"%.10f\n",M_PI);
return 0;
}
それではよろしくお願いします。