lgamma(3) logaritmo de la función gamma

SINOPSIS

#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);

DESCRIPCIÓN

La función Gamma se define como


 Gamma(x) = integral de 0 a infinito de t^(x-1) e^-t dt

Está definida para todo número real excepto enteros no positivos. Para un entero no positivo m la función se define como


 Gamma(m+1) = m!

y, de manera más general, para todo x:


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

Para x < 0.5 se puede utilizar


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

La función lgamma() devuelve el logaritmo natural del valor absoluto de la función Gamma. El signo de la función Gamma se devuelve en la variable entera externo signgam declarado en <math.h>. Vale 1 cuando la función Gamma es positiva o cero, -1 cuando es negativa.

Ya que usar una localización constante signgam no se considera hilo-seguro, se han introducido las funciones lgamma_r() etc.; devuelven el signo en el parámetro signp.

Para valores enteros no positivos de x, lgamma() devuelve HUGE_VAL, pone en errno el valor ERANGE y lanza la excepción de división por cero. (De manera similar, lgammaf() devuelve HUGE_VALF y lgammal() devuelve HUGE_VALL.)

ERRORES

Una aplicación que desee comprobar situaciones de error debería asignar a errno el valor cero y llamar a feclearexcept(FE_ALL_EXCEPT) antes de llamar a estas funciones. A la vuelta, si errno es distinto de cero o fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW) es distinto de cero, es que ha ocurrido un error.
ERANGE
Argumento no válido - valor entero no positivo de x.

CONFORME A

C99, SVID 3, BSD 4.3