半径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; }
それではよろしくお願いします。