Текст подпрограммы и версий
zp55r_c.zip  zp55d_c.zip 
Тексты тестовых примеров
tzp55r_c.zip  tzp55d_c.zip 

Подпрограмма:  zp55r_c

Назначение

Вычисление неполного частного и остатка при делении двух полиномов с вещественными коэффициентами.

Математическое описание

Пусть заданы два полинома с вещественными коэффициентами  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