NAME | SYNOPSIS | DESCRIPTION | IDIOSYNCRASIES | RETURN VALUES | ATTRIBUTES | SEE ALSO | NOTES
cc [ flag ... ] file ... -lm [ library ... ] #include <math.h> extern int signgam;double lgamma(double x);
Both lgamma() and lgamma_r() return
where
for x > 0 and
for x < 1.
lgamma() uses the external integer signgam to return the sign of |~(x) while lgamma_r() uses the user-allocated space addressed by signgamp.
In the case of lgamma(), do not use the expression signgam*exp(lgamma(x)) to compute
Instead compute lgamma() first:
lg = lgamma(x); g = signgam*exp(lg);
only after lgamma() has returned can signgam be correct. Note that |~(x) must overflow when x is large enough, underflow when -x is large enough, and generate a division by 0 exception at the singularities x a nonpositive integer.
For exceptional cases, matherr(3M) tabulates the values to be returned as dictated by various Standards.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
MT-Level | See NOTES below. |
Although lgamma_r() is not mentioned by POSIX.4a Draft 6, it was added to complete the functionality provided by similar thread-safe functions. This interface is subject to change to be compatible with the "spirit" of POSIX.4a when it is approved as a standard.
When compiling multi-thread applications, the _REENTRANT flag must be defined on the compile line. This flag should only be used in multi-thread applications.
lgamma() is unsafe in multithreaded applications. lgamma_r() should be used instead.
NAME | SYNOPSIS | DESCRIPTION | IDIOSYNCRASIES | RETURN VALUES | ATTRIBUTES | SEE ALSO | NOTES