Текст подпрограммы и версий zp55r_c.zip zp55d_c.zip |
Тексты тестовых примеров tzp55r_c.zip tzp55d_c.zip |
Вычисление неполного частного и остатка при делении двух полиномов с вещественными коэффициентами.
Пусть заданы два полинома с вещественными коэффициентами A (X) и B (X) степени NP и MP соответственно
A(X) = A(1) + A(2)*X + A(3)*X2 + ... + A(NP + 1)*XNP B(X) = B(1) + B(2)*X + B(3)*X2 + ... + B(MP + 1)*XMP
Подпрограмма zp55r_c вычисляет неполное частное Q (X) и остаток R (X) при делении полинома A (X) на B (X), т.е. такие полиномы Q (X) и R (X), что
A(X) = Q(X) B(X) + R(X)
Если MP > NP, то Q (X) ≡ 0 и R (X) ≡ A (X). Если MP ≤ NP, то полином Q (X) имеет степень NP - MP, а R (X) является полиномом степени не выше MP - 1. При этом элемент массива R (MP + 1) полагается равным нулю.
int zp55r_c (integer *np, real *a, integer *mp, real *b, real *q, real *r)
Параметры
np - | заданная степень полинома A (x) (тип: целый); |
a - | вещественный вектор длины np + 1, содержащий коэффициенты полинома A (x) в порядке возрастания степеней; |
mp - | заданная степень полинома B (x) (тип: целый); |
b - | вещественный вектор длины mp + 1, содержащий коэффициенты полинома B (x) в порядке возрастания степеней; |
q - | вещественный вектор длины np + 1, содержащий в первых np - mp + 1 элементах вычисленные коэффициенты неполного частного Q (x) в порядке возрастания степеней; |
r - | вещественный вектор длины np + 1, содержащий в первых mp элементах вычисленные коэффициенты остатка R (x) в порядке возрастания степеней; элемент R (mp + 1) полагается равным нулю. |
Версии
zp55d_c - | вычисление неполного частного и остатка при делении двух полиномов с вещественными коэффициентами в режиме удвоенной точности; при этом параметры a, b, q и r должны иметь тип double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Initialized data */ static float a[7] = { -10.f,30.f,-50.f,40.f,-20.f,8.f,8.f }; static float b1[5] = { -8.f,6.f,-4.f,3.f,2.f }; /* Local variables */ extern int zp55r_c(int *, float *, int *, float *, float *, float *); static float q[7], r__[7]; static int mp, np, i__; np = 6; mp = 4; zp55r_c(&np, a, &mp, b1, q, r__); for (i__ = 1; i__ <= 7; ++i__) { printf("\n %12.3e \n", q[i__ - 1]); } for (i__ = 1; i__ <= 7; ++i__) { printf("\n %12.3e \n", r__[i__ - 1]); } return 0; } /* main */ Результаты: q = ( 1.,- 2.,4. ) r__ = ( - 2., 8., - 2., 5. ) r__(5) = r(mp + 1) = 0.0