概率方法计算pi值的问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 20:58:18
计算如下:
-------------
#include <stdlib.h>
#include <iostream.h>
#include <time.h>

#define NUM 10000000

int main()
{
srand((unsigned int)time(NULL));
float i = 0.0;
float fx,fy,k=0.0;
while(i<NUM)
{
fx = (float)(rand()%101);
fy = (float)(rand()%101);

if(fx*fx+fy*fy<=10000.0)
{
k++;
}
i++;
}
cout << 4*k/NUM<<endl;
cin>>k;
return 0;
}
---------------
按说扇形边界上的点因为*4,所以相当于计算了两次,pi值应该大于3.14啊,为什么计算的结果总是3.12左右?应该怎么改???
to 1楼:按你的方法试了,没什么变化~~~

改成这样就好了。你限制随机数为0到100,太影响精度了。

while(i<NUM)
{
fx = (float)(rand());
fy = (float)(rand());

if(fx*fx+fy*fy<(float)0x8000*0x8000)
{
k++;
}
i++;
}

建议将if(fx*fx+fy*fy<=10000.0)
改为if(fx*fx+fy*fy-10000.0<1e-6)