21xrx.com
2024-12-22 20:43:47 Sunday
登录
文章检索 我的文章 写文章
用C++蒙特卡洛法计算圆周率的代码
2023-07-12 14:40:04 深夜i     --     --
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的值调整得更大一些。

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复