使用萊布尼茨公式計算 π 的近似值:
π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ...
當最後一項的絕對值小於 10⁻⁵ 時停止累加。
1, 3, 5, 7, ...(等差數列,首項 1,公差 2)。+, -, +, -, ...(sign = 1 → -1 → 1 ...)。term = 1.0 / denominator。fabs(term) < 1e-5。#include
#include
#include
using namespace std;
int main() {
double pi = 0, term = 1.0;
int denominator = 1;
int sign = 1;
while (fabs(term) > 1e-5) {
pi += sign * term;
denominator += 2;
term = 1.0 / denominator;
sign *= -1;
}
pi *= 4;
cout << fixed << setprecision(6) << pi << endl;
return 0;
}
1.0 而非 1,確保浮點除法。fabs(term) 處理負項。fixed << setprecision(6) 固定小數位。| 條件 | 代碼修改 |
|---|---|
| 固定項數 N | for (int i=0; i |
| 項值 < EPS | while (fabs(term) > EPS) |
| 相對誤差 < EPS | 需知道真值或用雙倍項數估計 |
本題是無限級數求和的入門範例。核心模式:初始化項 → 循環累加 → 更新項 → 檢查停止條件。理解「項的生成規律(分母遞增、符號交替)」與「浮點比較用絕對值」是關鍵。此模式廣泛適用於泰勒展開、傅里葉級數、數值積分等計算。