lgamma(), lgamma_r(), lgammaf(), lgammaf_r()

Вернуть значение натурального логарифма от гамма-функции

Прототип:

#include <math.h>
double lgamma( double x );
double lgamma_r( double x,
int *signgamp );
float lgammaf( float x );
float lgammaf_r( float x,
int *signgamp );

Аргументы:

x
Произвольное число.
signgam
(только для lgamma_r(), lgammaf_r()) Указатель на область памяти, где функция может хранить знак Γ( x ).

Библиотека:

libm

Описание:

Функции lgamma() и lgamma_r() возвращают натуральный логарифм (ln) от Г функции и эквивалентны gamma(). Данные функции возвращают ln|Γ( x )|, где Γ( x ) определена следующим образом:

Для x > 0:

gamma.png

Для x < 1: n / (Γ( 1 - x ) * sin( nx ))

Результаты сходятся, когда x находится в диапазоне от 0 до 1. Функция Г имеет свойство:

Γ( N ) = Γ( N - 1 ) × N

Функции lgamma*() вычисляют логарифм, потому что функция Г растет очень быстро.

Функции lgamma() и lgammaf() используют внешнее целое число signgam для возвращения знака Γ( x ), в то время как lgamma_r() и lgammaf_r() используют память, выделенную пользователем по адресу signgamp.


Note: Переменная signgam не инициализирована до тех пор, пока не завершится lgamma() или lgammaf(). Например, выражение:

g = signgam * exp( lgamma( x ) );

для вычисления g = Γ( x )'. Вместо этого, вычислите сначала lgamma():

lg = lgamma( x );
g = signgam * exp( lg );


Обратите внимание, что Γ( x ) должна переполниться при больших значениях x, и иметь крайне малые значения при больших значениях -x, и генерировать исключение деления на 0 при случаях, когда x является неположительным целым числом.

Возвращаемое значение:

ln|Γ( x )|


Note: В случае возникновения ошибки, эти функции возвращают 0, который также может быть и достоверным математическим результатом. Если вам необходимо проверить, возникла ли ошибка, установите errno в 0, вызовите функцию, и затем снова проверьте errno. Эти функции не изменяют errno в случае отсутствия ошибок.

Примеры:

#include <stdio.h>
#include <errno.h>
#include <inttypes.h>
#include <math.h>
#include <fpstatus.h>
int main( void )
{
double a, b;
errno = EOK;
a = 0.5;
b = lgamma( a );
printf( "lgamma(%f) = %f %d \n", a, b, errno );
return (0);
}

Код генерирует следующий вывод:

$ ./a.out lgamma(0.500000) = 0.572365 0

Классификация:

lgamma() и lgammaf() относятся к ANSI, POSIX 1003.1; lgamma_r() и lgammaf_r() относятся к ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

gamma()




Предыдущий раздел: Описание API математической библиотеки