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

C++ 二分法求根:修正循環條件與中點更新邏輯

     編輯:程式設計疑難解答

原代碼缺陷

  • x^2 是位運算 XOR,非冪運算,應為 x*x 或 pow(x,2)
  • while(f(c)!=0) 浮點數永不精確為 0,導致無限循環
  • 區間更新邏輯錯誤:應判斷 f(a)*f(c) < 0 決定新區間
  • 未重新計算中點 c = (a+b)/2

正確實現

double f(double x) { return x*x - x - 2; }
int main() {
    double a = 0, b = 3, c;
    const double EPS = 1e-5;
    while (b - a > EPS) { // 區間長度作為終止條件
        c = (a + b) / 2;
        if (f(a) * f(c) < 0) b = c;
        else a = c;
    }
    cout << fixed << setprecision(5) << c << endl; // 輸出 2.00000
    return 0;
}

關鍵點

  1. 終止條件用區間長度 b-a > EPS 或 |f(c)| < EPS
  2. 每次循環必須更新中點
  3. 包含 <iomanip> 使用 setprecision
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved