輸入係數 a, b, c (a ≠ 0),求方程 `ax² + bx + c = 0` 的實數根。
#include#include int main() { double a, b, c; scanf("%lf %lf %lf", &a, &b, &c); double disc = b*b - 4*a*c; if (disc < 0) { printf("No answer!\n"); } else if (disc == 0) { double x = -b / (2*a); printf("%.2f\n", x); } else { double sqrt_disc = sqrt(disc); double x1 = (-b + sqrt_disc) / (2*a); double x2 = (-b - sqrt_disc) / (2*a); if (x1 < x2) { double t = x1; x1 = x2; x2 = t; } // 確保大根在前 printf("%.2f\n%.2f\n", x1, x2); } return 0; }
當 `b² ≫ 4ac` 且 `b > 0` 時,`-b + sqrt(b²-4ac)` 發生大數吃小數,精度損失嚴重。
改進公式:
double q = -0.5 * (b + (b > 0 ? sqrt_disc : -sqrt_disc)); double x1 = q / a; double x2 = c / q; // 利用 x1*x2 = c/a
此寫法在科學計算庫中標準使用。
整理:(a+c)x² + 2bx + (a-c) = 0
Δ = 0 → 4b² - 4(a+c)(a-c) = 0 → a² = b² + c² → **直角三角形**(a 為斜邊)。
Δ = 0 → (a-b)² - (a-c)(a+c-2b) = 0 → 展開化簡 → (b-c)² = 0 → b = c → **等腰三角形**。
設數為 4x, 4y (互質),LCM=4xy=24 → xy=6。互質因子對 (1,6)→(4,24), (2,3)→(8,12)。選項中 **8 與 12** 符合。
一元二次方程求根是數值計算基石。**判別式分類**是邏輯核心,**數值穩定公式**是工程標準。結合幾何題(三角形判斷)能深化對判別式幾何意義的理解。實際開發中推薦使用成熟數學庫(如 Eigen、GSL)處理多項式求根。