|
Текст подпрограммы и версий zp14r_c.zip zp14c_c.zip |
Тексты тестовых примеров tzp14r_c.zip tzp14c_c.zip |
Вычисление корней квадратного уравнения с вещественными коэффициентами.
Подпрограмма zp14r_c вычисляет корни квадратного уравнения
A*X2 + B*X + C = 0.0 ,
в котором коэффициенты А, В и С являются вещественными. Вычисленные корни RООТ1 и RООТ2 в общем случае являются комплексными.
Алгоритм, реализованный в подпрограмме, изложен в статье
G.F.Forsythe, What Is a Satisfactory Quadratic Еquation Solver., Сonstructive Аspects of тне Fundamental Тheorem of Аlgebra, В.Dejon and Р.Нenrici eds., Wiley - Interscience, New York, 1969.
int zp14r_c (real *a, real *b, real *c, complex *root1,
complex *root2, integer *ierr)
Параметры
| a, b, c - | заданные коэффициенты квадратного уравнения (тип: вещественный); |
|
root1 - root2 | комплексные переменные, содержащие вычисленные корни квадратного уравнения; |
| ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом |
| ierr=65 - | когда старшие коэффициенты a и b равны 0.0; в этом случае первый корень полагается равным комплексному числу (- 3.4e38, 0.0), а второй (3.4e38, 0.0); |
| ierr=66 - | когда старший коэффициент a равен 0.0; в этом случае второй корень полагается равным комплексному числу (3.4e38, 0.0). |
Версии
| zp14c_c - | вычисляет корни квадратного уравнения с комплексными коэффициентами. Тем самым, коэффициенты a, b и c должны иметь тип complex. |
Вызываемые подпрограммы
| utzp10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограмм zp14r_c и zp14c_c. |
Замечания по использованию: нет
1.
int main(void)
{
/* Local variables */
static int ierr;
extern int zp14r_c(float *, float *, float *, complex *,
complex *, int *);
static float a1, a2, a3;
static complex z1, z2;
a1 = 1.f;
a2 = -3.f;
a3 = 2.f;
zp14r_c(&a1, &a2, &a3, &z1, &z2, &ierr);
printf("\n %16.7e %16.7e %16.7e \n", a1, a2, a3);
printf("\n %16.7e %16.7e \n", z1.r, z1.i);
printf("\n %16.7e %16.7e \n", z2.r, z2.i);
printf("\n %5i \n", ierr);
return 0;
} /* main */
Результаты:
z1 = (1.0, 0.0) , z2 = (2.0, 0.0) ,
ierr = 0
2.
int main(void)
{
/* Local variables */
extern int zp14c_c(complex *, complex *, complex *, complex *,
complex *, int *);
static int ierr;
static complex a, b, c__, z1, z2;
a.r = 1.f, a.i = 0.f;
b.r = 1.f, b.i = 3.f;
c__.r = -2.f, c__.i = 1.f;
zp14c_c(&a, &b, &c__, &z1, &z2, &ierr);
printf("\n %16.7e %16.7e \n", a.r, a.i);
printf("\n %16.7e %16.7e \n", b.r, b.i);
printf("\n %16.7e %16.7e \n", c__.r, c__.i);
printf("\n %16.7e %16.7e \n", z1.r, z1.i);
printf("\n %16.7e %16.7e \n", z2.r, z2.i);
printf("\n %5i \n", ierr);
return 0;
} /* main */
Результаты:
z1 = (0.0, - 1.0) , z2 = (- 1.0, - 2.0) ,
ierr = 0