如上图,圆为单位圆,面积为 π*r*r = π ,阴影部分为单位圆的四分之一,面积即为 π/4
右上角的正方形框面积为1
像右上角的正方形框中均匀撒点,假设撒n个,落入阴影区域的点的个数为x个,当样本足够多,即n足够大时
x/n无线接近于 π/4
由此法求解圆周率及为蒙特卡罗求解π算法的主要思想
代码如下:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
int n,count=0;
double x, y;
srand(time(NULL));
cout << "输入精度描述 n : " << endl;
cin >> n;
for (int i = 0; i < n; i++)
{
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if (x*x + y*y < 1.0)
count++;
}
cout << "PI 可能等于" << (double)count*4 / n << endl;
system("pause");
return 0;
}
参考自C++常用算法手册