判別式 Δ = b² - 4ac。
Δ > 0:兩實根 x₁,₂ = (-b ± √Δ) / 2a
Δ = 0:一重根 x = -b / 2a
Δ < 0:無實根(可輸出虛根形式)
若 √Δ 為整數,直接輸出數值;否則保留 sqrt(Δ) 符號,避免大量小數輸出。判斷整數技巧:
double sqr = sqrt(delta);
int x = (int)sqr;
int y = (int)(sqr + 0.9999999); // double 精度約 6 位小數
if (x == y) { // 是整數
// 用整數 sqr1 = (int)sqr 參與運算
} else {
// 輸出含根號格式
}
if (delta > 0) {
double sqr = sqrt(delta);
if ((int)sqr == (int)(sqr + 0.9999999)) { // 整數根
int sqr1 = (int)sqr;
printf("x1=%d, x2=%d\n", (-b+sqr1)/(2*a), (-b-sqr1)/(2*a));
} else { // 保留根號
printf("x1=(-%d+√%.0f)/%d, x2=(-%d-√%.0f)/%d\n", b, delta, 2*a, b, delta, 2*a);
}
}
為解決作業中大量小數輸出不美觀問題而編寫,利用 double 精度特性判斷整數,保留根號表達式使結果更符合數學習慣。