蒙特卡罗法求圆周率,哪位大侠能详细解释下。
花满留香 2011-05-02 09:29:21 #include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
bool toss()
{
double x=0.0,y=0.0;
double sign=((double)rand()/RAND_MAX);
double size=((double)rand()/RAND_MAX);
if(sign>0.5)
x=size;
else
x=-size;
sign=((double)rand()/RAND_MAX);
size=((double)rand()/RAND_MAX);
if(sign>0.5)
y=size;
else
y=-size;
double z=sqrt(x*x+y*y);
if(z>1)
return false;
else return ture;
}
double ratio(int num)
{
int i,sum=0;
srand((unsigned)time(0));
for(i=0;i<num;i++)
{
if(toss()==1)
sum++;
}
return (double)sum/(double)num;
}
double MonteCarloPi(int num)
{
return ratio(num)*4;
}
void main()
{
double pi=MonteCarloPi(10000);
printf("PI=%f\n",pi);
}
函数的嵌套调用,求高手解读。