前幾天,我發表了一篇隨筆:「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項...