Текст подпрограммы и версий sf18r_c.zip sf18d_c.zip |
Тексты тестовых примеров tsf18r_c.zip tsf18d_c.zip |
Вычисление функций Кельвина первого порядка.
sf18r_c вычисляет функции Кельвина первого рода (ber1 (x) и bei1(x)) и второго рода (ker1 (x) и kei1 (x)) первого порядка.
J.F.Hart, E.W.Cheney, C.L.Lawson et al, Computer Approximations, Wiley, New York, 1968.
int sf18r_c (real *x, real *ber1, real *bei1, real *aker1, real *akei1, integer *ierr)
Параметры
x - | заданное значение аргумента x (тип: вещественный); |
ber1 - bei1 aker1 akei1 | вычисленные значения функций ber1 (x), bei1 (x), ker1 (x), kei1 (x) соответственно (тип :вещественный); |
ierr - | целая переменая, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
ierr= 1 - | когда значение аргумента меньше 0.; значения aker1 и akei1 полагаются равными 3.4e38; |
ierr=66 - | когда абсолютное значение аргумента больше 57.58; значения ber1 и bei1 полагаются равными 0.; в случае, когда аргумент неотрицателен, aker1 и akei1 также полагаются равными 0., иначе aker1 и akei1 полагаются равными 3.4e38. |
Версии
sf18d_c - | вычисление функций Кельвина первого порядка с повышенной точностью. |
Вызываемые подпрограммы
sf17r_c - sf17d_c | подпрограммы вычисления производных функций Кельвина нулевого порядка с обычной и повышенной точностью (используются в sf18r_c и sf18d_c). |
utsf10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы sf18r_c. |
utsf11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы sf18d_c. |
Замечания по использованию
Для подпрограммы sf18d_c параметры x, ber1, bei1, aker1 и akei1 имеют тип double  и абсолютное значение аргумента не должно превосходить 2.04e03. При нарушении этого условия значение ierr полагается равным 66 и для отрицательного x значения aker1 и akei1 полагаются pавными 1.7e308. При x = 0, ber1 = 0., bei1 = 0., aker1 = akei1 = - 3.4e38 (для sf18r_c) или - 1.7e308 (для sf18d_c). |
int main(void) { /* Local variables */ static int ierr; extern int sf18r_c(float *, float *, float *, float *, float *, int *); static float akei1, aker1, x, bei1, ber1; x = .4f; sf18r_c(&x, &ber1, &bei1, &aker1, &akei1, &ierr); printf("\n %16.7e %16.7e \n",ber1, bei1); printf("\n %16.7e %16.7e \n",aker1, akei1); printf("\n %5i \n",ierr); return 0; } /* main */ Результаты: ber1 = -0.144230864453, bei1 = 0.138574135911, aker1 = -1.88202405043, akei1 = -1.44430515029, ierr = 0