Текст подпрограммы и версий
sf16r_c.zip  sf16d_c.zip 
Тексты тестовых примеров
tsf16r_c.zip  tsf16d_c.zip 

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

Назначение

Вычисление функций Кельвина нулевого порядка.

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

sf16r_c вычисляет функции Кельвина первого рода (ber (x) и bei (x)) и второго рода (ker (x) и kei (x)) нулевого порядка.

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

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

    int sf16r_c (real *x, real *ber, real *bei, real *aker,
            real *akei, integer *ierr)

Параметры

x - заданное значение аргумента x (тип: вещественный);
            ber -
            bei  
         aker  
         akei  
вычисленные значения функций ber (x), bei (x), ker (x) и kei (x) соответственно (тип: вещественный);
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
ierr= 1 - когда значение аргумента меньше 0.; значения aker и akei полагаются равными 3.4e38;
ierr=66 - когда абсолютное значение аргумента больше 57.58; значения ber и bei полагаются равными 0.; в случае, когда аргумент неотрицателен, aker и akei также полагаются равными 0.; иначе aker и akei полагаются равными 3.4e38.

Версии

sf16d_c - вычисление функций Кельвина нулевого порядка с повышенной точностью.

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

utsf10_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы sf16r_c.
utsf11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы sf16d_c.

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

 

Для подпрограммы sf16d_c параметры x, ber, bei, aker, akei имеют тип double и абсолютное значение аргумента x не должно превосходить 2.04e03. При нарушении этого условия значение ierr полагается равным 66 и для отрицательного x значения aker и akei полагаются равными 1.7e308.

При x = 0, ber = 1., akei = - π / 4, aker = 3.4e38 (для sf16r_c) или 1.7e308 (для sf16d_c).

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

int main(void)
{
    /* Local variables */
    extern int sf16r_c(float *, float *, float *, float *, float *, int *);
    static int ierr;
    static float x, x1, x2, x3, x4;

    x = .4f;
    sf16r_c(&x, &x1, &x2, &x3, &x4, &ierr);

    printf("\n %16.7e %16.7e %16.7e \n",x, x1, x2);
    printf("\n %16.7e %16.7e \n",x3, x4);
    printf("\n %5i \n",ierr);
    return 0;
} /* main */


Результаты:

       x1     =  0.999600004442, 
       x2     =  0.039998222229, 
       x3     =  1.06262390276, 
       x4     = -0.703800212017, 
       ierr    =  0