蒙特卡洛

        1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam  Nick Metropolis共同发明,被称为蒙特卡洛方法。它的具体定义是:在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积,怎么计算列?蒙特卡洛(Monte Carlo)方法告诉我们,均匀的向该正方形内撒N是一个很大的自然数)个黄豆,随后数数有多少个黄豆在这个不规则几何形状内部,比如说有M个,那么,这个奇怪形状的面积便近似于M/NN越大,算出来的值便越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。蒙特卡洛方法可用于近似计算圆周率:让计算机每次随机生成两个01之间的数,看这两个实数是否在单位圆内。生成一系列随机点,统计单位圆内的点数与总点数,(圆面积和正方形面积之比为PI:1PI为圆周率),当随机点取得越多(但即使取109次方个随机点时,其结果也仅在前4位与圆周率吻合)时,其结果越接近于圆周率。

#include <stdio.h>
#include <stdlib.h>

#define COUNT 5000000

int inCircle(double x,double y)
{
	if((x*x+y*y)<=1)
		return 1;
	return 0;
}

int main()
{
	double x,y;
	int count=0;
	int i;

	srand((unsigned)time(NULL));

	for(i=0;i<COUNT;i++)
	{
		x=rand()*1.0/RAND_MAX;
		y=rand()*1.0/RAND_MAX;

		if(inCircle(x,y))count++;
	}

	printf("PI:%f\n",(count*4.0)/COUNT);
	return 1;
}


你可能感兴趣的:(null,图形)