#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);
The lgamma() function returns the natural logarithm of the absolute value of the Gamma function. The sign of the Gamma function is returned in the external integer signgam declared in <math.h>. It is 1 when the Gamma function is positive or zero, -1 when it is negative.
Since using a constant location signgam is not thread-safe, the functions lgamma_r() etc. have been introduced; they return this sign via the parameter signp.
For nonpositive integer values of x, lgamma() returns HUGE_VAL, sets errno to ERANGE and raises the zero divide exception. (Similarly, lgammaf() returns HUGE_VALF and lgammal() returns HUGE_VALL.)
A range error occurs if x is too large. A pole error occurs if x is a negative integer or zero.