Страница 1 из 2 Получение корней квадратного уравнения относится к элементарным понятиям алгебры; формулы для корней известны очень давно. В то же время, при численной реализации этих формул могут встретиться неприятности, обход одной из которых и будет здесь разобран.
Программа написана для случая действительных коэффициентов (корни могут быть комплексными). Квадратное уравнение записывается в виде: 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|, то при пользовании классическими формулами один из корней будет формироваться с использованием вычитания двух близких чисел и это может привести к потере точности. Чтобы этого избежать, по классическим формулам вычисляется только один корень (при вычислении которого этого не происходит), а второй корень находится по формуле Виета. Случай, когда корни комплексные, для действительных корней уравнения указанной трудности не представляет. |