在使用蒙特卡洛的随机方法输入给定的精度以获得“pi”值后,我试图找到实际的精度。假设实际精度的答案应该与给定的精度一样接近。但是当我运行与给定精度完全不接近的程序时,我的实际精度一直在 0.7 左右。我试图看看我的“pi”值是多少,它似乎收敛在 3.11-3.12 左右……真的需要你的帮助……这是我的代码:
#include <iostream>
#include <math.h>
#include <stdlib.h>
#define _USE_MATH_DEFINES
using namespace std;
void values(float *pi, int *P, int *Q)
{
float x(0), y(0);
x = (rand()%100)/99.0;
y = (rand()%100)/99.0;
if(sqrt((x*x)+(y*y))<=1)
{
(*P)++;
}
(*Q)++;
*pi = 4.0*(*P)/(*Q);
}
float get_pi(float required_accuracy)
{
int D(0), N(0);
float pi_estimate(0), x(0), y(0), temp(0);
while(N<=100)
{
values(&pi_estimate,&D,&N);
}
while(1)
{
if(4./(N+1.)<((required_accuracy*0.01)*(pi_estimate)))
{
cout<<pi_estimate<<endl;
return (pi_estimate);
}
values(&pi_estimate,&D,&N);
}
}
int main()
{
for(float a=0.1;a>=1.e-14;a/=10.)
{
cout<<"Actual accuracy : "<<(fabs(get_pi(a) - M_PI)/(M_PI))*100.<<endl;
}
}