首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言浮點數不能進行位運算 (^ & |):IEEE 754 表示導致精度缺失

     編輯:程式設計疑難解答

錯誤代碼

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)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved