C++使用蒙特卡罗方法(Monte Carlo method)计算π
蒙特卡罗法也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。是按抽样调查法求取统计值来推定未知特性量的计算方法。蒙特卡罗是摩纳哥的著名赌城,该法为表明其随机抽样的本质而命名。故适用于对离散系统进行计算仿真试验。在计算仿真中,通过构造一个和系统性能相近似的概率模型,并在数字计算机上进行随机试验,可以模拟系统的随机特性。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
int n = 1000000; // 随机点的个数
int count = 0; // 计数器,用于记录位于圆内的随机点数
// 获取当前时间的秒数,用于生成随机数种子
srand(static_cast<unsigned int>(time(nullptr)));
for (int i = 0; i < n; i++) {
// 生成[-1, 1]之间的随机数
double x = static_cast<double>(rand() / static_cast<double>(RAND_MAX) * 2 - 1);
double y = static_cast<double>(rand() / static_cast<double>(RAND_MAX) * 2 - 1);
// 判断该点是否在圆内
if (x * x + y * y <= 1) {
count++;
}
}
// 计算估计的圆周率
double pi = static_cast<double>(count) / static_cast<double>(n) * 4;
// 输出计算结果
cout << "随机点个数: " << n << endl;
cout << "圆内的点个数: " << count << endl;
printf("计算得到的π的值: %.8f\n", pi);
return 0;
}