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

無窮級數求 e^x 近似值 C++ 實作

     編輯:C 語言入門

數學原理

泰勒級數展開:

e^x = 1 + x + x^2/2! + x^3/3! + ... + x^n/n! + ...

當項值 |x^n/n!| < ε(如 1e-6)時截斷,累加和即為近似值。

遞推關係式:避免重複計算階乘與冪次

令第 n 項 p_n = x^n/n!,則:

p_0 = 1

p_n = p_{n-1} * x / n

只需一個變數迭代更新,O(n) 時間、O(1) 空間。

完整 C++ 程式碼

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main() {
    double x;
    cout << "請輸入 x 的值:";
    if (!(cin >> x)) return 0;

    const double EPS = 1e-6;
    double ex = 0.0;   // 累加和
    double term = 1.0; // 當前項 p_n
    int n = 0;

    while (fabs(term) > EPS) {
        ex += term;
        ++n;
        term = term * x / n; // 遞推計算下一項
    }

    cout << fixed << setprecision(6);
    cout << "e^" << x << " ≈ " << ex << endl;
    cout << "標準庫 exp(" << x << ") = " << exp(x) << endl;
    cout << "誤差 = " << fabs(ex - exp(x)) << endl;
    return 0;
}

執行範例

請輸入 x 的值:1
e^1.000000 ≈ 2.718282
標準庫 exp(1.000000) = 2.718282
誤差 = 0.000000

關鍵點解析

  • 遞推公式:term *= x / n 消除階乘與冪次重算,效率極高。
  • 收斂判斷:fabs(term) > EPS 處理正負 x,確保絕對誤差界。
  • 數值穩定:對大 |x|,項值先增後減,雙精度足以應對常見範圍;極大 |x| 需 Kahan 求和或範圍縮減。
  • 驗證:對照 std::exp 驗證精度。

擴展:任意函數泰勒展開框架

template <typename Func>
double taylorSum(double x, Func termGen, double eps = 1e-12) {
    double sum = 0, term = termGen(0, x);
    for (int n = 0; fabs(term) > eps; ++n) {
        sum += term;
        term = termGen(n+1, x);
    }
    return sum;
}

// e^x 專用項生成器
auto expTerm = [](int n, double x) -> double {
    static double prev = 1;
    if (n == 0) return prev = 1;
    return prev *= x / n;
};

總結

無窮級數求值核心在於**遞推關係式**與**收斂條件**。掌握此模式,可輕鬆實作 sin、cos、ln、arctan 等超越函數近似計算。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved