使用C語言計算圓周率:多種演算法與實作範例全解析

1. 使用C語計算圓周率的意義與方法

圓周率(π)定義為圓的周長與直徑的比值,是數理科學與工程等領域中極為重要的常數。使用C語言計算圓周率,不僅有助於理解演算法,也能學習數值計算的基礎,具有重要意義。本文將逐步解說多種以C語言求取圓周率的方法,為對數值計算感興趣的讀者提供實用知識。

2. C語言的圓周率基本計算方法

利用萊布尼茨級數計算圓周率

萊布尼茨級數是一種利用無限級數計算圓周率的方法,其公式如下:

[ pi = 4 times left( 1 – frac{1}{3} + frac{1}{5} – frac{1}{7} + cdots right) ]

實作範例

以下程式示範如何在C語言中利用萊布尼茨級數計算圓周率。使用者可輸入計算次數,重複運算以取得圓周率的近似值。

#include <stdio.h>

int main() {
    int n, i;
    double pi = 0.0;
    int sign = 1;

    printf("請輸入計算次數: ");
    scanf("%d", &n);

    for (i = 0; i < n; i++) {
        pi += sign * (4.0 / (2 * i + 1));
        sign = -sign;
    }

    printf("圓周率近似值: %.15fn", pi);
    return 0;
}

優點: 實作簡單、易於理解
缺點: 收斂速度非常慢,不適合高精度計算

侍エンジニア塾

3. 利用蒙地卡羅法估算圓周率

蒙地卡羅法透過隨機在方形內投點,判斷該點是否落在圓內,並以機率的方式估算圓周率。

實作範例

以下示範在C語言中使用蒙地卡羅法估算圓周率的程式:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int n, i;
    int inside_circle = 0;
    double x, y, pi;

    printf("請輸入總投點數: ");
    scanf("%d", &n);

    srand(time(0));

    for (i = 0; i < n; i++) {
        x = (double)rand() / RAND_MAX;
        y = (double)rand() / RAND_MAX;

        if ((x * x + y * y) <= 1) {
            inside_circle++;
        }
    }

    pi = 4.0 * inside_circle / n;
    printf("圓周率近似值: %.15fn", pi);

    return 0;
}

優點: 實作簡單,能學習機率概念
缺點: 收斂速度慢,不適合計算高精度圓周率

4. 高斯-勒讓德演算法

高斯-勒讓德演算法是一種高效的方法,可在少量迭代下計算出極高精度的圓周率。

實作範例

#include <stdio.h>
#include <math.h>

int main() {
    double a = 1.0;
    double b = 1.0 / sqrt(2.0);
    double t = 0.25;
    double p = 1.0;
    double pi;
    int n, iterations;

    printf("請輸入迭代次數: ");
    scanf("%d", &iterations);

    for (n = 0; n < iterations; n++) {
        double a_next = (a + b) / 2.0;
        double b_next = sqrt(a * b);
        double t_next = t - p * pow(a - a_next, 2);

        a = a_next;
        b = b_next;
        t = t_next;
        p = 2 * p;
    }

    pi = pow(a + b, 2) / (4 * t);
    printf("圓周率近似值: %.15fn", pi);

    return 0;
}

優點: 收斂速度極快,精度高
缺點: 實作較複雜,需要數值計算知識

5. 精度與效率比較

計算方法精度收斂速度執行時間適用場景
萊布尼茨級數初學實作練習、學習
馬欽公式中~高較短需要實用近似值時
蒙地卡羅法依投點數而定概率與統計模擬
高斯-勒讓德極高極快需要高精度計算時

6. 總結

使用C語言計算圓周率的方法很多,收斂速度、精度與計算量各有差異。應根據程式目的與精度需求選擇合適方法。若需要高精度計算,可選擇高斯-勒讓德演算法;若想嘗試簡單實作,可用萊布尼茨級數等,並依學習需求靈活運用。