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

C 語言調和級數求項數:浮點數比較陷阱與正確迴圈寫法

     編輯:程式設計綜合問答

題目:求最小的 i 使 1 + 1/2 + ... + 1/i ≥ 15。原始碼用 while (s != 15.0) 判斷,因浮點數精度問題永遠不會相等,導致無限迴圈或提早結束。

正確邏輯

#include <stdio.h>
int main() {
    int i = 1;
    double sum = 0.0;
    while (1) {
        double term = 1.0 / i;
        if (sum + term > 15.0) break; // 超過 15 停止
        sum += term;
        i++;
    }
    printf("項數 i = %d, 和 = %f\n", i, sum);
    return 0;
}

關鍵點

  • **永不直接比較浮點數相等**,改用「下一項加入後是否超過目標」作為終止條件。
  • 輸出的是**使總和首次超過 15 的那一項索引**,題目若要求「剛好等於 15」則無解(調和級數無有限項和為整數)。
  • 若需高精度,可改用 long double 或任意精度庫。

理解浮點數誤差特性,是數值計算程式設計的基本功。

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