📜  什么是 pi - C++ (1)

📅  最后修改于: 2023-12-03 15:21:46.835000             🧑  作者: Mango

什么是 Pi

Pi是数学上的一个重要常数,它表示的是一个圆的周长与直径的比值,通常用希腊字母π表示。其值约为3.14159265359。

在计算机科学中,Pi常常被用来处理圆和球的相关问题,比如计算圆的面积和体积,或者计算球的表面积和体积。同时,Pi也是很多算法和公式中的一个重要参数。在很多应用中,高精度计算Pi也是很有用的,比如密码学、图像处理、物理模拟等。

如何计算 Pi

计算 Pi 的方法有很多,下面列出一些常见的方法。

迭代法

迭代法是一种比较基础的计算 Pi 的方法。该方法依据圆的面积公式,不断迭代计算逼近 Pi 的值。具体步骤如下:

  1. 定义圆的面积公式 $S=\pi r^2$。
  2. 将一个圆分成若干份,计算每份的面积,并相加以得到圆的面积。
  3. 将圆内切到一个正方形中,计算该正方形的面积($S=s^2$)。
  4. 通过比较圆与正方形的面积,得到一个比率,这个比率越来越接近圆的面积与正方形面积的比例,从而逐步逼近 Pi 的值。

以下是 C++ 中使用迭代法计算 Pi 的代码片段:

double pi = 0;
int n = 1000000;
for (int i = 0; i < n; i++) {
    double x = (double)rand() / RAND_MAX;
    double y = (double)rand() / RAND_MAX;
    if (x * x + y * y <= 1) pi += 1;
}
pi = 4.0 * pi / n;
蒙特卡罗方法

蒙特卡罗方法是一类随机算法,通过生成大量随机样本,统计样本落在某个区间的概率来近似计算数学常数。其中,计算 Pi 的方法是在以原点为中心、半径为1的圆内,随机生成有限个点,然后统计这些点中有多少在圆内,从而可以求出圆的面积,最终计算出 Pi。

以下是 C++ 中使用蒙特卡罗方法计算 Pi 的代码片段:

double pi = 0;
int n = 1000000;
for (int i = 0; i < n; i++) {
    double x = (double)rand() / RAND_MAX;
    double y = (double)rand() / RAND_MAX;
    if (x * x + y * y <= 1) pi += 1;
}
pi = 4.0 * pi / n;
马青公式

马青公式是一种高精度计算 Pi 的方法,以人称名字命名。该公式的计算效率相对较高,误差也比较小。具体步骤如下:

  1. 根据公式 $\displaystyle\frac{\pi}{4}=\arctan(\displaystyle\frac{1}{2})+\arctan(\displaystyle\frac{1}{3})$,先求出 $\arctan(\displaystyle\frac{1}{2})$ 和 $\arctan(\displaystyle\frac{1}{3})$ 的值。
  2. 使用 $\arctan(x)=\displaystyle\sum_{n=0}^\infty\frac{(-1)^n}{2n+1}x^{2n+1}$ 的泰勒公式展开式计算 $\arctan(\displaystyle\frac{1}{2})$ 和 $\arctan(\displaystyle\frac{1}{3})$ 的值。
  3. 利用 $\pi=4\arctan(1)$ 计算出 Pi。(其中 $\arctan(1)=\frac{\pi}{4}$)

以下是 C++ 中使用马青公式计算 Pi 的代码片段:

void arctan(vector<int>& A, vector<int>& B, int x) {
    // 根据泰勒公式,计算arctan(x)的值
}

void calc_PI(vector<int>& PI) {
    vector<int> A(PI.size() + 10), B(PI.size() + 10), C(PI.size() + 10);
    arctan(A, C, 5);
    arctan(B, C, 239);
    // 根据马青公式,计算pi的值
}