首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 累加求圓周率:萊布尼茨公式與收斂判斷

     編輯:關於C++

問題描述

使用萊布尼茨公式計算 π 的近似值:
π/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. 浮點字面量:1.0 而非 1,確保浮點除法。
  2. 絕對值判斷:fabs(term) 處理負項。
  3. 輸出格式:fixed << setprecision(6) 固定小數位。
  4. 收斂速度:萊布尼茨公式收斂極慢(誤差 ~ 1/n),需 ~10萬項達到 1e-5 精度。工程上常用馬青公式、丘德諾夫斯基算法等快速收斂級數。

變體:不同停止條件

條件代碼修改
固定項數 Nfor (int i=0; i
項值 < EPSwhile (fabs(term) > EPS)
相對誤差 < EPS需知道真值或用雙倍項數估計

總結

本題是無限級數求和的入門範例。核心模式:初始化項 → 循環累加 → 更新項 → 檢查停止條件。理解「項的生成規律(分母遞增、符號交替)」與「浮點比較用絕對值」是關鍵。此模式廣泛適用於泰勒展開、傅里葉級數、數值積分等計算。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved