x^2 是位運算 XOR,非冪運算,應為 x*x 或 pow(x,2)while(f(c)!=0) 浮點數永不精確為 0,導致無限循環f(a)*f(c) < 0 決定新區間c = (a+b)/2double 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;
}
b-a > EPS 或 |f(c)| < EPS<iomanip> 使用 setprecision