本題要求計算函數 psi(x) 在 x ∈ [0, 2] 區間、步長 0.001 的值並格式化輸出。屬於基礎數值計算與輸出格式控制練習題。
對每個 x,計算:
psi(x) = (1-x) * Σ[k=1 to 9999] 1 / (k*(k+1)*(k+x)) + (1-x)/(2*10000^2) + 1
輸出格式:%5.3f %16.12f,即 x 佔 5 位小數點後 3 位,psi(x) 佔 16 位小數點後 12 位。
x 從 0 到 2.000,步長 0.001,共 2001 個點。使用 for (x = 0; x <= 2.000; x += 0.001) 需注意浮點誤差累積,實際建議用整數迴圈 for (int i = 0; i <= 2000; i++) { x = i * 0.001; }k < 10000,即 k = 1..9999double 足夠,最終項 (1-x)/(2*10000^2) 為尾項修正%5.3f %16.12f,包含空格對齊
#include
int main() {
int k;
double x, psi_x;
for (int i = 0; i <= 2000; i++) {
x = i * 0.001;
psi_x = 0.0;
for (k = 1; k < 10000; k++) {
psi_x += 1.0 / (k * (k + 1) * (k + x));
}
psi_x = psi_x * (1 - x) + (1 - x) / (2.0 * 10000 * 10000) + 1.0;
printf("%5.3f %16.12f\n", x, psi_x);
}
return 0;
}
1.0/(k*(k+1)) 存入陣列,內層僅做一次除法k*(k+1)*(k+x) 可能溢出 int,需強制轉 double 計算float 導致精度不足x 迴圈條件 x <= 2.0 浮點誤差導致少輸出或多輸出一行k <= 10000 多加一項