用戶貼出二分法求根代碼截圖,代碼格式混亂,核心邏輯在 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;
if (f(mid) * f(a) > 0) b = mid; else a = mid; 導致區間不收斂或收斂到錯誤側。f(mid) 與 0 大小,忽略了 f(a) 的符號,無法確定根在哪側。f(mid) == 0(浮點數絕不相等)、或 mid == a 等不可靠條件。a, b, mid, f(mid) 觀察區間收斂情況。f(x)=x*x-2 求 √2)驗證邏輯。f(x) 在 [a,b] 連續且 f(a)*f(b) < 0(異號),否則二分法不適用。代碼格式混亂極大地增加了閱讀與調試難度。建議統一縮進、添加註釋、拆分長行,養成良好編碼習慣。核心修正點在於 while 內兩個 if 的條件判斷與區間更新邏輯必須與數學原理完全一致。