Текст подпрограммы и версий
pa06r_c.zip  pa06d_c.zip 
Тексты тестовых примеров
tpa06r_c.zip  tpa06d_c.zip 

Функция:  pa06r_c

Назначение

Вычисление значения непрерывной дроби.

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

pa06r_c вычисляет значение суммы  N звеньев непрерывной дроби

         fN  =  b0  +  a1 / ( b1 + a2 / ( b2 + ... + aN / ( bN )...) ) .

Использование

    real pa06r_c (real *b0, real *a, real *b, integer *n)

Параметры

b0 - значение коэффициента  b0 непрерывной дроби (тип: вещественный);
a, b - вещественные векторы длины  n, компонентами которых являются коэффициенты  ai и  bi ( i = 1, ..., n) непрерывной дроби;
n - заданное число звеньев непрерывной дроби (тип: целый).

Версии

pa06d_c - вычисление значения непрерывной дроби в режиме удвоенной точности. При этом параметры b0, a, b должны иметь тип double.

Вызываемые подпрограммы: нет

Замечания по использованию

  В подпрограммах - функциях pa06r_c и pa06d_c имeeтcя внешняя структура с именем pa06rr_ , содержащая элемент целого типа с именем nreal. Знaчeниe пepeмeннoй nreal пoлaгaeтcя равной номеру звена непрерывной дроби, для которого  fnreal = fnreal - 1 .

Пример использования

Пусть требуется вычислить сумму 10 звеньев непрерывной дроби

    arctg x   =   x / (1 + x2 / (3 + 4 x2 / (5 + 9 x2 / (7 + ... )...)))     при  x = 0.2


struct {
    int nreal;
} pa06rr_;

#define pa06rr_1 pa06rr_

int main(void)
{
    /* Local variables */
    extern float pa06r_c(float *, float *, float *, int *);
    static float a[10], b[10];
    static int i__, n;
    static float x, b0, res;
    int i__1;

    n = 10;
    x = .2f;
    b0 = 0.f;
    a[0] = x;
    b[0] = 1.f;
    for (i__ = 2; i__ <= 10; ++i__) {
/* Computing 2nd power */
        i__1 = i__ - 1;
        a[i__ - 1] = i__1 * i__1 * x * x;
        b[i__ - 1] = (float) ((i__ << 1) - 1);
/* L1: */
    }
    res = (float)pa06r_c(&b0, a, b, &n);

    printf("\n %16.7e \n", res);
    printf("\n %5i \n", pa06rr_1.nreal);
    return 0;
} /* main */


Результаты:  res  =  0.1973956 ,       nreal  =  6