我正在閱讀Robert Sedgewick和Kevin Wayne編寫的入門書。實現二次算法
在其中一個例子它們實現二次類,如下所示:
public class Quadratic
{
public static void main(String[] args)
{
double b = Double.parseDouble(args[0]);
double c = Double.parseDouble(args[1]);
double discriminant = b * b - 4.0 * c;
double d = Math.sqrt(discriminant);
System.out.println((-b + d)/2.0);
System.out.println((-b - d)/2.0);
}
}
筆者省略了二次公式的「A」係數。這是因爲'a'係數可以被抵消(分子/分母)嗎?
根據反饋...請問下面是正確的解決方案:
public static void main(String[] args)
{
double b = Double.parseDouble(args[0]);
double c = Double.parseDouble(args[1]);
double a = Double.parseDouble(args[2]);
double discriminant = b * b - 4.0 * a * c;
double d = Math.sqrt(discriminant);
System.out.println((-b + d)/(2.0 * a));
System.out.println((-b - d)/(2.0 * a));
}
如果判別式爲負數或a == 0,則不適用。這是一個天真的實現,不會考慮特殊情況(a == 0,b == 0,c == 0)。 – duffymo
@duffymo感謝您的反饋,你可以闡述你的想法?你有替代解決方案嗎? – dcrearer
是的,通過我提到的三個案例中的每一個,看看它是如何改變解決方案的。例如,如果b = 0,則有兩個解:+/- sqrt(c/a)。如果a = 0,那麼只有一個解決方案:-c/b。如果c = 0,則有兩個解:0和-b/a。如果判別式爲負,則兩個解是複數,彼此的共軛。你應該考慮所有這些。 – duffymo