首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言階乘級數求和:1/1! + 1/2! + ... + 1/20! (e-1 逼近)

     編輯:關於C

數學背景

e = Σ_{n=0}^∞ 1/n! = 1 + 1/1! + 1/2! + ...,故級數和趨近 e - 1 ≈ 1.718281828。

遞推關係 (關鍵優化)

term_n = term_{n-1} / n,避免重複計算階乘。

#include 
int main() {
    double sum = 0.0;
    double term = 1.0; // 1/0! = 1
    for (int n = 1; n <= 20; n++) {
        term /= n;      // term = 1/n!
        sum += term;    // 累加
    }
    printf("%.10f\n", sum); // 1.7182818285
    return 0;
}

原始碼錯誤分析

t = t * (1/n); // 錯誤:1/n 整數除法 = 0 (n>1) -> t 永遠歸零
// 正確: t = t / n; 或 t *= 1.0/n;

雙重驗證:直接計算 n! 累加 (原碼第二題)

double sum = 0, fact = 1;
for (int n = 1; n <= 20; n++) {
    fact *= n;      // n!
    sum += fact;    // Σ n!
}
printf("%.0f\n", sum); // 2561327455189073900 (超過 double 53bit 精確整數範圍,末位不準)
  • 20! = 2.43e18,double 尾數 53 bit ≈ 15-16 位十進位精度,Σ n! 末位會丟失精度。
  • 大整數求和需 unsigned __int128 (GCC/Clang) 或大數庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved