|
Текст подпрограммы и версий sf16r_c.zip sf16d_c.zip |
Тексты тестовых примеров tsf16r_c.zip tsf16d_c.zip |
Вычисление функций Кельвина нулевого порядка.
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