題目:求最小的 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;
}
long double 或任意精度庫。理解浮點數誤差特性,是數值計算程式設計的基本功。