使用快速傅利葉變換計算圓周率

2021-09-05 19:25:05 字數 1309 閱讀 9467

前幾天,我發表了一篇隨筆:「bigarithmetic - 提供任意精度的算術運算的靜態類」。現在,讓我們使用 bigarithmetic 類來計算圓周率。

我們需要乙個計算 π 的分析演算法。有用的演算法是二次收斂的,即每一次迭代使有效位數增加一倍。計算 π 的二次收斂演算法是基於 acm 法(算術幾何平均法)。首先設定初始值為:

然後,當 i = 0, 1, ... 重複迭代:

直到足夠的精度。

下面就是源程式**:

1using

system;23

namespace

skyiv.numeric461

}62if(j 

<

n) continue;63

}64break;65

}66return

pi;67}68

}69}

這個程式很簡單,就是按照前面給出的公式進行計算而已。

下面是測試程式:

1using

system;

2using

system.text;

3using

system.diagnostics;

4using

skyiv.numeric;56

namespace

skyiv7.

", bs[

0], environment.newline);

17for

(inti =

1; i 

<=

(digits +1

) /2; i++)

1823

stopwatch.stop();

24if

((digits +1

) /2%

25!=025

"digits: elapsed:

", digits, stopwatch.elapsed);

26console.write(sb);27}

28}29}

執行結果如下:

pi = 3.

1415926535 8979323846 2643383279 5028841971 6939937510

5820974944 5923078164 0628620899 8628034825 3421170679

...4610126483 6999892256 9596881592 0560010165 5256375678

digits:10,000 elapsed:00:00:04.0998524

這個結果可以和我在2023年9月30日寫的「計算圓周率的c#程式」這篇隨筆中的結果相對照。

7 15 計算圓周率

7 15 計算圓周率 15 分 根據下面關係式,求圓周率的值,直到最後一項的值小於給定閾值。2 1 1 3 2 3 5 3 3 5 7 n 3 5 7 2 n 1 輸入格式 輸入在一行中給出小於1的閾值。輸出格式 在一行中輸出滿足閾值條件的近似圓周率,輸出到小數點後6位。輸入樣例 0.01 輸出樣例...

7 15 計算圓周率

學到翁愷老師 c語言程式設計 第八周了,來pta做點習題練習 題目是 用圓周率的關係式,求圓周率的值,直到最後一項的值小於給定閾值。2 1 3 1 3 5 2 3 5 7 3 3 5 7 2n 1 n 輸入格式 輸入在一行中給出小於1的閾值。輸出格式 在一行中輸出滿足閾值條件的近似圓周率,輸出到小數...

《計算圓周率》python

題目 歷史上有許多計算圓周率pai的公式,其中,格雷戈里和萊布尼茨發現了下面的公式 pai 4 1 1 3 1 5 1 7 這個公式簡單而優美,但美中不足,它收斂的太慢了。如果我們四捨五入保留它的兩位小數,那麼 累積1項是 4.00 累積2項是 2.67 累積3項是 3.47 請你寫出它累積100項...