首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

調和級數求和項數計算:C 語言迴圈邊界條件修正

     編輯:程式設計綜合問答

問題描述

計算調和級數 1 + 1/2 + 1/3 + ... 何時超過 15.0。原代碼輸出 1835422,正確答案為 1835421。

錯誤分析

for(i=1; s<15.0; i++) s+=1.0/i;
printf("%ld", i); // 迴圈結束時 i 已多增 1

當 s >= 15.0 滿足退出條件時,i++ 已執行,導致結果偏大 1。

修正方案

for(i=1; ; i++) {
    s += 1.0/i;
    if(s > 15.0) break;
}
printf("%ld", i); // 此時 i 為恰好使和超過 15.0 的項數

數學驗證

調和級數第 n 項和 H_n ≈ ln(n) + γ (γ≈0.577)。解 ln(n) + 0.577 > 15 得 n > e^14.423 ≈ 1.83e6,與結果吻合。

進階優化

大規模求和時,由小到大累加(避免大數吃小數精度損失),或使用 Kahan 求和演算法提升精度。

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