Вернуть значение натурального логарифма от гамма-функции
#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 );
libm
Функции lgamma() и lgamma_r() возвращают натуральный логарифм (ln) от Г функции и эквивалентны gamma(). Данные функции возвращают ln|Γ( x )|, где Γ( x ) определена следующим образом:
Для x > 0:
Для x < 1: n / (Γ( 1 - x ) * sin( nx ))
Результаты сходятся, когда x находится в диапазоне от 0
до 1
. Функция Г имеет свойство:
Γ( N ) = Γ( N - 1 ) × N
Функции lgamma*() вычисляют логарифм, потому что функция Г растет очень быстро.
Функции lgamma() и lgammaf() используют внешнее целое число signgam для возвращения знака Γ( x ), в то время как lgamma_r() и lgammaf_r() используют память, выделенную пользователем по адресу signgamp.
Переменная signgam не инициализирована до тех пор, пока не завершится lgamma() или lgammaf(). Например, выражение:
для вычисления g = Γ( x )'. Вместо этого, вычислите сначала lgamma():
|
Обратите внимание, что Γ( x ) должна переполниться при больших значениях x, и иметь крайне малые значения при больших значениях -x, и генерировать исключение деления на 0
при случаях, когда x является неположительным целым числом.
ln|Γ( x )|
В случае возникновения ошибки, эти функции возвращают 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() относятся к ЗОСРВ «Нейтрино»
Предыдущий раздел: Описание API математической библиотеки