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.