利用求单位正方形与内接圆面积的比例关系来求的π的近似值。单位圆的1/4面积是一个扇形,它是边长为1单位正方形的一部分。如果能求出 扇形面积s1在正方形面积s中占的比例k=s1/s,它的值也等于π/4,从而得到π的值。
求比例k,蒙特卡罗法是在正方形中随机投入很多点,使所投的点落在正方形中每一个位置的机会相等。有些点将落在扇形内,而另一些点将会落在扇形外,落在扇形内的点数m与所投点的总数n之间比即为k的近似值。
附代码:
#include<stdio.h>
#include<stdlib.h>//srand(); rand();
#include<time.h>
#include<math.h>
int main() {
double x, y, pi;
int n, count;
srand((unsigned)time(NULL)); //播种随机数
for (n = 1, count = 0; n <= 200000; n++) { //将20万个点随机撒在范围x(0~1)和y(0~1)的区域内
x = rand() / (double)RAND_MAX;
y = rand() / (double)RAND_MAX; //x,y∈[0,1)
if (sqrt((x - 0.5)*(x - 0.5) + (y - 0.5)*(y - 0.5)) < 0.5) { //比较得出有count个点落在了半径为0.5,圆心(0.5,0.5)的圆内
count++;
}
}
pi = 1.0*count/200000;
printf("the pi is %7.5lf\n",4*pi);
return 0;
}
/*
int rand(); 产生[0,RAND_MAX)之间的伪随机数。 返回一个伪随机(整)数
int random(int num); 产生[0,num)之间的随机数。 返回一个随机(整)数
*/