lgamma(3M)
NAME
lgamma, lgamma_r − log gamma function
SYNOPSIS
#include <math.h>
extern int signgam;
double lgamma(double x);
double lgamma_r(double x, int ∗signgamp);
MT-LEVEL
See the NOTES section of this page.
DESCRIPTION
Both lgamma() and lgamma_r() return
ln|Γ(x)|
where
Γ(x) = ∫0s10∞tx−1e−tdt
for x > 0 and
Γ(x) = π/(Γ(1−x)sin(πx))
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.
IDIOSYNCRASIES
In the case of lgamma(), do not use the expression signgam∗exp(lgamma(x)) to compute ‘g := Γ(x)’. Instead compute lgamma() first:
lg = lgamma(x); g = signgam∗exp(lg);
only after lgamma() has returned can signgam be correct. Note: Γ(x) must overflow when x is large enough, underflow when −x is large enough, and generate a division by zero exception at the singularities x a nonpositive integer.
RETURN VALUES
For exceptional cases, matherr(3M) tabulates the values to be returned as dictated by various Standards.
SEE ALSO
NOTES
lgamma() is unsafe in multithreaded applications. lgamma_r() should be used instead.
These functions are MT-Safe when compiled with the shared library, libm.so, but are unsafe if compiled with the archived library libm.a.
SunOS 5.2 — Last change: 5 Mar 1993