錯誤代碼
double x, sum = 1;
sum = sum + (x ^ n) / a[i]; // ❌ 編譯錯誤:雙精度浮點數不能用 ^
根本原因
- 位運算符 (^、&、|、~、<<、>>) 僅定義於整數型別** (int、long、char 等)。
- 浮點數 (float/double) 在記憶體中按 **IEEE 754 標準** 儲存 (符號位、指數位、尾數位),**不支援位級操作**。
- 浮點數本身存在**精度缺失** (如 0.1 無法精確表示),若允許位運算會導致不可預期的語義混淆。
正確寫法:冪次運算用 pow() 或手動累乘
#include <math.h>
// 方案一:pow() 庫函數 (通用、支援非整數指數)
double term = pow(x, n); // x 的 n 次方
// 方案二:整數指數手動累乘 (效能更高、精度可控)
double power(double base, int exp) {
double result = 1.0;
while (exp > 0) {
if (exp & 1) result *= base; // 這裡 exp 是 int,可用位運算
base *= base;
exp >>= 1;
}
return result;
}
// 在泰勒級數計算中:
double term = power(x, n) / factorial(n);
代碼邏輯補充修正
while(i <= x) 中 x 未初始化,應為項數上限 (如 n)。
factorial 函數參數應為 int,遞歸終止條件 n <= 1 返回 1。
- 泰勒級數
e^x = Σ(x^n/n!) 需累加直到項值 < 機器精度 (如 1e-15)。