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

C 語言二分法求根代碼邏輯錯誤分析:while 循環內 if 條件判斷反轉

     編輯:程式設計綜合問答

問題代碼片段

用戶貼出二分法求根代碼截圖,代碼格式混亂,核心邏輯在 while 循環中的兩個 if 分支。

二分法代碼截圖

典型二分法正確邏輯

double a = left, b = right, mid;
while (b - a > EPS) {  // EPS 為精度閾值,如 1e-8
    mid = (a + b) / 2.0;
    if (f(mid) * f(a) <= 0)  // 根在 [a, mid] 區間
        b = mid;
    else                     // 根在 [mid, b] 區間
        a = mid;
}
return (a + b) / 2.0;

常見錯誤模式

  1. 區間更新方向反了:if (f(mid) * f(a) > 0) b = mid; else a = mid; 導致區間不收斂或收斂到錯誤側。
  2. 缺少函數值符號判斷:直接比較 f(mid) 與 0 大小,忽略了 f(a) 的符號,無法確定根在哪側。
  3. 循環終止條件錯誤:用固定迭代次數、或 f(mid) == 0(浮點數絕不相等)、或 mid == a 等不可靠條件。
  4. 變量類型不匹配:整型變量存儲浮點中間值,導致精度丟失、死循環。

調試建議

  • 打印每次迭代的 a, b, mid, f(mid) 觀察區間收斂情況。
  • 用已知根的函數(如 f(x)=x*x-2 求 √2)驗證邏輯。
  • 確保 f(x) 在 [a,b] 連續且 f(a)*f(b) < 0(異號),否則二分法不適用。

代碼格式混亂極大地增加了閱讀與調試難度。建議統一縮進、添加註釋、拆分長行,養成良好編碼習慣。核心修正點在於 while 內兩個 if 的條件判斷與區間更新邏輯必須與數學原理完全一致。

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