Функция: sf13r_c
Назначение
Вычисление экспоненциальных интегралов.
Математическое описание
Функция sf13r_c производит вычисления следующих интегралов
x
(1) y = ∫ (et / t) dt , для x > 0.0
-∞
∞
(2) y = - ∫ (e - t / t) dt , для x < 0.0
-x
∞
(3) y = ∫ (e - t / t) dt , для x > 0.0
x
x
(4) y = e - x ∫ (et / t) dt , для x > 0.0
-∞
∞
(5) y = - e - x ∫ (e - t / t) dt , для x < 0.0
-x
Алгоритм, реализованный в функции, изложен в статье
W.J.Cody, H.C.Thacher, Rational Chebyshev Approximation for
the Exponential Integral Ei (x), Math. Comp. 23, 1969.
Использование
real sf13r_c (real *x, integer *l, integer *ierr)
Параметры
x -
|
заданное значение аргумента x (тип: вещественный);
|
l -
|
задает режим работы функции (тип: целый); при
этом если:
|
l = 1 -
|
вычисляется интеграл (1), если x > 0.0. или
интеграл (2), если x < 0.0;
|
l = 2 -
|
вычисляется интеграл (3), если x > 0.0;
|
l = 3 -
|
вычисляется интеграл (4), если x > 0.0, или
интеграл (5), если x < 0.0;
|
ierr -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы функции; при
этом:
|
ierr= 1 -
|
когда аргумент задан отрицательным
числом при l = 2; вычисления
производятся с использованием абсолютного
значения аргумента;
|
ierr=66 -
|
когда значение l меньше 1 или больше 3;
значение sf13r_c полагается равным 3.4e38;
|
ierr=67 -
|
когда значение аргумента pавно 0.;
значение sf13r_c полагается равным 3.4e38,
если l = 2, или - 3.4e38,
если l = 1 или 3;
|
ierr=68 -
|
когда значение аргумента превосходит
43.66 при l = 1; значение sf13r_c
полагается равным 3.4e38;
|
ierr=69 -
|
когда значение аргумента меньше - 41.18
при l = 1 или 2; значение sf13r_c
полагается равным 0.
|
Версии
sf13d_c -
|
вычисление экспоненциальных интегралов (1) - (5)
с повышенной точностью.
|
Вызываемые подпрограммы
utsf10_c -
|
подпрограмма выдачи диагностических сообщений
при работе функции sf13r_c.
|
utsf11_c -
|
подпрограмма выдачи диагностических сообщений
при работе функции sf13d_c.
|
Замечания по использованию
|
Область допустимых значений аргумента для функций sf13r_c
и sf13d_c указана выше при описании параметра ierr, при
этом в случае функции sf13d_c вместо 3.4e38 берется
значение 1.7e308. kpоме того, для функции sf13d_c аргумент
x имеет тип двойной точности и его максимальное значение
pавно 2.04e3 при l = 1 или 2 (ierr = 68),
а минимальное значение pавно - 2050 при
l = 1 или 2 (ierr = 69).
|
Пример использования
int main(void)
{
/* Local variables */
extern float sf13r_c(float *, int *, int *);
static int ierr, l;
static float x, y;
x = -.5f;
l = 1;
y = (float)sf13r_c(&x, &l, &ierr);
printf("\n %16.7e %5i \n",y,ierr);
return 0;
} /* main */
Результаты:
y = -0.559773594775, ierr = 0