Текст подпрограммы и версий 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