調和級數 H_n = 1 + 1/2 + 1/3 + ... + 1/n 發散,但增長極慢。求最小的 n 使得 H_n ≥ 15。
// 錯誤 1:整數除法
s += 1 / i; // 1/i 為整數除法,i>1 時結果為 0
// 錯誤 2:浮點比較精度
if (s == 15.0) // 浮點數難以精確相等
// 錯誤 3:循環條件導致多加一次
for (i=1; s<=15.0; i++) { s += 1.0/i; } // 循環結束時 i 已經是 n+1
#include <stdio.h>
int main() {
int n = 1;
double sum = 0.0;
do {
sum += 1.0 / n; // 強制浮點除法
n++;
} while (sum < 15.0);
n--; // 循環結束時 n 已經多加 1
printf("n = %d\n", n);
printf("sum = %.10f\n", sum);
return 0;
}
n = 1835421
sum = 15.0000004406
1.0 / n 確保浮點除法。do-while 或 while 先加後判斷,避免邊界誤差。n ≈ e^(15-γ) ≈ 1.8×10^6(γ 為歐拉常數),驗證結果合理。