蒙特卡罗方法原理是产生随机数,计算落在指定区域的个数比例即为圆周率。
如图,圆形面积与正方形面积比例为 π(2R)^2 / R^2 = π/4, 那么计算出的比例*4即为π。
#include <stdio.h>
#include <stdlib.h>
#define RENDER_MAX 100000
//生成L-R 范围内的随机数
double Rand(double L, double R){
double ret;
ret = L + (R-L)*rand()*1.0/RAND_MAX;
return ret;
}
main(){
srand(time(NULL));
int i;
int count = 0;
for(i=0;i<RENDER_MAX; i++){
double x,y;
x = Rand(-1,1);
y = Rand(-1,1);
if(x*x + y*y <= 1){ //求到中心的长度,即是否在圆圈内
count ++;
}
}
printf("%f\n",4.0*count/RENDER_MAX ); //比例*4
}