用蒙特卡洛算法计算圆周率π的近似值

利用求单位正方形与内接圆面积的比例关系来求的π的近似值。单位圆的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)之间的随机数。	返回一个随机(整)数
*/

猜你喜欢

转载自blog.csdn.net/qq_32650831/article/details/104851607