Текст подпрограммы и версий
sf50r_c.zip  sf50d_c.zip 
Тексты тестовых примеров
tsf50r_c.zip  tsf50d_c.zip 

Функция:  sf50r_c

Назначение

Вычисление полных эллиптических интегралов третьего рода П (x, k).

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

Функция sf50r_c производит вычисление интегралов вида:

                    π/2                    
   П (x, k) =  ∫  dt / (1 + x sin 2 t) (1 - k 2 sin 2 t) 1 / 2
                   0
   для    0 ≤ k 2 ≤ 1   и   x ≠ - 1 

J.F.Hart, E.W.Cheney, C.L.Lawson et al, Computer Approximations, Wiley, New York, 1968.

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

    real sf50r_c (real *x, real *rk2, integer *ierr)

Параметры

x, rk2 - заданные значения аргументов x и k2 соответственно (тип: вещественный);
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы функции; при этом:
ierr=65 - когда значение x pавно - 1; значение функции полагается равным 3.4e38;
ierr=66 - когда значение rk2 меньше 0 или больше или pавно 1; значение функции полагается равным 3.4e38.

Версии

sf50d_c - вычисление полных эллиптических интегралов третьего рода с повышенной точностью.

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

       sf14r_c -        sf14d_c   вычисление полных эллиптических интегралов первого рода с обычной и повышенной точностью (используются в sf50r_c и sf50d_c соответственно).
       sf15r_c -        sf15d_c   вычисление полных эллиптических интегралов второго рода с обычной и повышенной точностью (используются в sf50r_c и sf50d_c соответственно).
       sf19r_c -        sf19d_c   вычисление неполных эллиптических интегралов первого рода с обычной и повышенной точностью (используются в sf50r_c и sf50d_c соответственно).
       sf20r_c -        sf20d_c   вычисление неполных эллиптических интегралов второго рода с обычной и повышенной точностью (используются в sf50r_c и sf50d_c соответственно).
utsf14_c - подпрограмма выдачи диагностических сообщений при работе функции sf50r_c.
utsf15_c - подпрограмма выдачи диагностических сообщений при работе функции sf50d_c.

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

  Для функции sf50d_c параметры x и rk2 имеют тип double. Значение sf50d_c при ierr ≠ 0 полагается pавным 1.7e308.

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

int main(void)
{
    /* Local variables */
    extern float sf50r_c(float *, float *, int *);
    static int ierr;
    static float r__, x, rk2;

    x = 1.f;
    rk2 = .5f;
    r__ = (float)sf50r_c(&x, &rk2, &ierr);

    printf("\n %16.7e %5i \n",r__,ierr);
    return 0;
} /* main */


Результаты:   r__  =  1.27312736674 ,    ierr = 0