Алгоритм получение корней квадратного уравнения
Страница 2. Программа для решения квадратного уравнения с действительными коэффициентами


 

Программа для решения квадратного уравнения с действительными коэффициентами

Ниже расположена программа для решения квадратного уравнения с действительными коэффициентами.

/* Решение квадратного уравнения. Случай с действительными коэффициентами.

int Quadratic(double *x,double a,double b,double c);
Параметры:
x - массив решений (размера 2).
На выходе:
2 действительных корня -> тогда x заполняется ими;
2 сложно-соединенных корня -> x[0] - действительная часть,
x[1] - неотрицательная мнимая часть.
другие случаи -> x[0] - уникальный корень, если возвращено (-1),
иначе нет верных корней.
a, b, c - коэффициенты: ax^2 + bx + c = 0.
Результаты: 2 - 2 действительных корня;
1 - 1 действительный корень (x[0]=x[1]);
0 - 2 комплексных корня;
-1 - один действительный корень в случае a==0;
-2 - нет корней в случае a=0, b=0;
-3 - бесконечное число корней (a=b=c=0).
*/

#include <math.h> /* for sqrt() */

int Quadratic(double *x,double a,double b,double c) {
double d;
/* вырожденные случаи */
if(a==0.) {
if(b==0.) {
if(c==0.) return(-3);
return(-2);
}
x[0]=-c/b; return(-1);
}
/* главный случай */
d=b*b-4.*a*c; /* дискриминант */
/* единственный корень */
if(d==0.) {
x[0]=x[1]=-b/(2.*a); return(1);
}
/* сложно-соединенные корни */
if(d<0.) {
double t=0.5/a;
x[0]=-b*t; x[1]=sqrt(-d)*t;
return(0);
}
/* 2 действительных корня */
if(b>=0.) d=(-0.5)*(b+sqrt(d));
else d=(-0.5)*(b-sqrt(d));
x[0]=d/a; x[1]=c/d;
return(2);
}
 
« Предыдущая статья   Следующая статья »