計算交錯級數 f = Σ (-1)^(i-1) / i!,i = 1..9。這是 e⁻¹ 的泰勒展開部分和。
int i = 1; double f = 0; int flag = 1;
do {
f += flag * 1.0 / factorial(i);
flag = -flag;
i++;
} while (i <= 9);
int i = 1; double f = 0; int flag = 1;
while (i <= 9) {
f += flag * 1.0 / factorial(i);
flag = -flag;
i++;
}
double f = 0; int flag = 1;
for (int i = 1; i <= 9; i++) {
f += flag * 1.0 / factorial(i);
flag = -flag;
}
int factorial(int n) {
int result = 1;
for (int j = 1; j <= n; j++) result *= j;
return result;
}
其結果是: 0.632121
真實值 1 - 1/e ≈ 0.6321205588,9 項已相當精確。
fact *= i 即可得到 i!double 而非 float 提高精度long double 或任意精度庫同一數學問題的三種迴圈寫法對比,幫助初學者理解 for/while/do-while 的適用場景與等價轉換。