Алгоритм получение корней квадратного уравнения


Получение корней квадратного уравнения относится к элементарным понятиям алгебры; формулы для корней известны очень давно. В то же время, при численной реализации этих формул могут встретиться неприятности, обход одной из которых и будет здесь разобран. Программа написана для случая действительных коэффициентов (корни могут быть комплексными). 

Квадратное уравнение записывается в виде:
a*x2+b*x+c=0,   a!=0.
Классическая формула для нахождения его корней (как в действительном, так и в комплексном случае):

x1=(-b-sqrt(b2-4ac))/(2a),    x2=(-b+sqrt(b2-4ac))/(2a).

Существует и альтернативный способ получения корней: x1=2c/(-b-sqrt(b2-4ac)),    x2=2c/(-b+sqrt(b2-4ac)).

Трудность, о которой будет идти здесь речь (и она не единственная), связана с тем, что в том случае, когда b2 значительно превышает |4ac|, то при пользовании классическими формулами один из корней будет формироваться с использованием вычитания двух близких чисел и это может привести к потере точности. Чтобы этого избежать, по классическим формулам вычисляется только один корень (при вычислении которого этого не происходит), а второй корень находится по формуле Виета.

Случай, когда корни комплексные, для действительных корней уравнения указанной трудности не представляет.

 
« Предыдущая статья   Следующая статья »