Текст подпрограммы и версий
rcr2r_c.zip , rcr2d_c.zip
Тексты тестовых примеров
trcr2r_c.zip , trcr2d_c.zip

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

Назначение

Суммирование рядов при помощи преобразования Эйлера

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

Подпрограмма rcr2r_c находит сумму ряда по I от нуля до бесконечности, I - й член которого вычисляется задаваемой пользователем подпрограммой - функцией fterm (I). Суммирование ряда осуществляется до тех пор, пока NTERM раз подряд абсолютные значения членов ряда не будут меньше заданного числа EPS.

Подпрограмма rcr2r_c, использующая метод Эйлера для преобразования рядов, может быть использована для суммирования медленно сходящихся или расходящихся рядов

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

    int rcr2r_c (real *sum, R_fp fterm, integer *nterm, real *eps)

Параметры

sum - вещественная переменная, значение которой полагается равным вычисленной сумме ряда;
fterm - имя вещественной подпрограммы - функции вычисления  I - ого члена ряда; ее заголовок имеет вид:

float fterm(int *i__)

где i__ - номер вычисляемого члена ряда;

nterm - количество требуемых подряд идущих членов ряда, таких, что каждый из них по абсолютной величине меньше eps (тип: целый);
eps - заданное число, определяющее критерий останова при суммировании ряда

Версии

rcr2d_c - суммирование рядов при помощи преобразования Эйлера в режиме удвоенной точности; при этом параметры sum и eps должны иметь тип double, а подпрограмма - функция fterm должна быть описана как double

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

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

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

int main(void)
{
    /* Local variables */
    extern int rcr2r_c(float *, R_fp, int *, float *);
    extern float fterm_c();
    static int nterm;
    static float eps, sum;

    nterm = 4;
    eps = 1e-5f;
    rcr2r_c(&sum, (R_fp)fterm_c, &nterm, &eps);

    printf("\n %16.7e \n", sum);
    return 0;
} /* main */

float fterm_c(int *i__)
{
    /* System generated locals */
    float ret_val;

    /* Builtin functions */
    double pow_ri(float *, int *);

    ret_val = (float)pow_ri(&c_b6, i__);
    return ret_val;
} /* fterm_c */


Результат:      sum   =   1.999999