21xrx.com
2025-04-01 21:04:27 Tuesday
文章检索 我的文章 写文章
用C++蒙特卡洛法计算圆周率的代码
2023-07-12 14:40:04 深夜i     120     0
C++ 蒙特卡洛法 圆周率 计算 代码

近年来,蒙特卡洛法成为计算圆周率的一种常用方法。本文将介绍使用C++语言实现蒙特卡洛法计算圆周率的代码。

首先,我们需要明确蒙特卡洛法的原理。在二维平面上,一个边长为1的正方形可以内切一个半径为1的圆,如下图所示:

[图片]

假设我们有N个点随机散布于正方形内,其中有M个点落在了圆的内部。那么,根据蒙特卡洛法的原理,可以使用以下公式计算圆周率:

π = 4 * M / N

下面是我们实现蒙特卡洛法计算圆周率的代码:

#include <iostream>
#include <cmath>
#include <random>
using namespace std;
int main() {
  int N = 1000000; // 总点数
  int M = 0; // 落在圆内的点数
  // 初始化伪随机数生成器
  uniform_real_distribution<double> dist(0.0, 1.0);
  random_device rd;
  mt19937 gen(rd());
  // 随机生成N个点并统计落在圆内的点数M
  for (int i = 0; i < N; i++) {
    double x = dist(gen);
    double y = dist(gen);
    if (sqrt(x * x + y * y) < 1.0) {
      M++;
    }
  }
  // 计算圆周率
  double pi = 4.0 * M / N;
  // 输出结果
  cout << "π = " << pi << endl;
  return 0;
}

代码中,我们使用C++11中的 库实现伪随机数生成器。使用uniform_real_distribution dist(0.0, 1.0)初始化一个生成0到1之间的实数的均匀分布。

在循环中,我们使用dist(gen)生成一个随机实数,然后计算它与原点的距离是否小于1。如果小于,说明这个点在圆内,此时M加1。

最后,根据公式计算圆周率,并输出结果。

值得注意的是,随着N的增大,计算所得圆周率的精度会逐渐提高。如果您对精度有要求,可以将N的值调整得更大一些。

蒙特卡洛法计算圆周率是一种简单而实用的方法。本文中的代码可以帮助您快速理解并实现此方法。无论您是学生还是工程师,都可以通过这种方式加深自己对计算机学科的理解和认识。

  
  

评论区

请求出错了