LGAMMA(3)

НАЗВАНИЕ
lgamma - логарифм гамма-функции

СИНТАКСИС
#include <math.h>

double lgamma(double x);
float lgammaf(float x);
long double lgammal(long double x);

double lgamma_r(double x, int *signp);
float lgammaf_r(float x, int *signp);
long double lgammal_r(long double x, int *signp);

ОПИСАНИЕ
Гамма-функция определяется так:

 Gamma(x) = integral from 0 to infinity of t^(x-1) e^-t dt

Она определена для всех действительных чисел, кроме неположительных целых. Для неположительных интеграл m получим

 Gamma(m+1) = m!

и в общем случае для всех x:

 Gamma(x+1) = x * Gamma(x)

Для x < 0.5 можно использовать упрощенный вариант рассчета:

 Gamma(x) * Gamma(1-x) = PI/sin(PI*x)

Функция lgamma() возвращает натуральный логарифм для абсолютного значения гамма-функции. Знак гамма-функции возвращается во внешнем целом signgam, объявленном в <math.h>. Он равен 1 если гамма-функция положительно или равно нулю, и -1 если она отрицательна.

Так как использование постоянного расположения signgam не является безопасным для ветвей процессов, то функции lgamma_r() и т.п. были изменены; теперь они возвращают знак через параметр signp.

Для неположительных целых значений x, lgamma() возвращает HUGE_VAL, устанавливает errno в ERANGE и активирует исключение деления на ноль. (Аналогичным образом lgammaf() возвращает HUGE_VALF, а lgammal() возвращает HUGE_VALL.)

НАЙДЕННЫЕ ОШИБКИ
Приложение, желающее проверить ситуацию с ошибкой, должно определить errno в ноль и вызвать feclearexcept(FE_ALL_EXCEPT) перед вызовом этих функций. При возврате значений, если errno не равно нудю или если fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW) не равно нулю - то действительно произошла ошибка.

ERANGE
    Некорректный аргумент - неположительное целое значение x.

СООТВЕТСТВИЕ СТАНДАРТАМ
C99, SVID 3, BSD 4.3

СМ. ТАКЖЕ
tgamma(3)