2016-03-08 2 views
0

Я читаю вступительную книгу программирования Роберта Седжуика и Кевина Уэйна.Реализация квадратичного алгоритма

В одном из примеров они реализуют квадратный класс следующим образом:

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

Не, если дискриминант отрицательный, или == 0. Это наивная реализация, которая не учитывает особые случаи (a == 0, b == 0, c == 0). – duffymo

+0

@duffymo спасибо за отзыв, можете ли вы рассказать о своей мысли? У вас есть альтернативное решение? – dcrearer

+0

Да, просмотрите каждый из трех случаев, о которых я говорил, и посмотрим, как это изменит решение. Например, если b = 0, существует два решения: +/- sqrt (c/a). если a = 0, существует только одно решение: -c/b. Если с = 0, то существует два решения: 0 и -b/a. Если дискриминант отрицательный, два решения являются комплексными числами, сопряженными друг с другом. Вы должны учитывать все это. – duffymo

ответ

4

Нет, автор мог бы реализовать этот алгоритм по-разному. Предполагая, что общий случай, a не может быть отменен как -b фактор не состоит из.

Формула для нахождения корней квадратного уравнения: -

roots = (-b +(-) sqrt((b^2) - (4*a*c)))/(2*a). 
    // here - alongwith + represents how to find second root. 

Я предлагаю вам пройти через распространенный способ. Если автор использовал различные соглашения, пожалуйста, не следуйте этому.

Следуйте стандартному/общедоступному пути. Это легко понять.

На основе обратной связи ... Будет следующее правильное решение: ..

Решение, которое вы добавили к вопросу как редактировать кажется правильным. Поэтому я предлагаю вам пойти именно так.

+0

Можете ли вы посмотреть мое редактирование и дать некоторые мысли. – dcrearer

+0

Это неверно. Автор отменил его из уравнения, а не из формулы для квадратичных корней. Не могли бы вы пересмотреть свой ответ так, как будто он принят? – user1952500

+0

@ user1952500 - SORRY, это правильная/стандартная формула. Это не может быть неправильно. Затем у меня нет книги. Как я могу сказать, что автор отменил? Пусть OP идет со стандартным подходом формулы. Спасибо за ваш вопрос. –

3

Я думаю, что авторы приобретают некоторую нормализацию, в котором старший коэффициент квадратного уравнения равен 1.

Так, например:

 
2x2 + 4x + 8 = 0 

будет представлена ​​как

 
x2 + 2x + 4 = 0 

Это одно и то же уравнение, так оно и есть нормальное, так сказать.

Смежные вопросы