Я читаю вступительную книгу программирования Роберта Седжуика и Кевина Уэйна.Реализация квадратичного алгоритма
В одном из примеров они реализуют квадратный класс следующим образом:
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);
}
}
Автор опускает «а» коэффициента квадратичной формулы. Это потому, что коэффициент «а» можно отменить (числитель/знаменатель)?
На основе обратной связи ... Будет следующий правильное решение:
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));
}
Не, если дискриминант отрицательный, или == 0. Это наивная реализация, которая не учитывает особые случаи (a == 0, b == 0, c == 0). – duffymo
@duffymo спасибо за отзыв, можете ли вы рассказать о своей мысли? У вас есть альтернативное решение? – dcrearer
Да, просмотрите каждый из трех случаев, о которых я говорил, и посмотрим, как это изменит решение. Например, если b = 0, существует два решения: +/- sqrt (c/a). если a = 0, существует только одно решение: -c/b. Если с = 0, то существует два решения: 0 и -b/a. Если дискриминант отрицательный, два решения являются комплексными числами, сопряженными друг с другом. Вы должны учитывать все это. – duffymo