LGAMMA(3M) LGAMMA(3M) NAME lgamma - log gamma function SYNOPSIS #include double lgamma(x) double x; DESCRIPTION Lgamma returns ln|Γ(x)|. The external integer signgam returns the sign of Γ(x) . IDIOSYNCRASIES Do not use the expression signgam∗exp(lgamma(x)) to compute g := Γ(x). Instead use a program like this (in C): lg = lgamma(x); g = signgam∗exp(lg); Only after lgamma has returned can signgam be correct. Note too that Γ(x) must overflow when x is large enough, underflow when -x is large enough, and spawn a division by zero when x is a nonpositive integer. Only in the UNIX math library for C was the name gamma ever attached to lnΓ. Elsewhere, for instance in IBM’s FORTRAN library, the name GAMMA belongs to Γ and the name ALGAMA to lnΓ in single precision; in double the names are DGAMMA and DLGAMA. Why should C be different? Archaeological records suggest that C’s gamma originally delivered ln(Γ(|x|)). Later, the program gamma was changed to cope with negative arguments x in a more conventional way, but the documentation did not reflect that change correctly. The most recent change corrects inaccu‐ rate values when x is almost a negative integer, and lets Γ(x) be com‐ puted without conditional expressions. Programmers should not assume that lgamma has settled down. At some time in the future, the name _g_a_m_m_a will be rehabilitated and used for the gamma function, just as is done in FORTRAN. The reason for this is not so much compatibility with FORTRAN as a desire to achieve greater speed for smaller values of |x| and greater accuracy for larger values. Meanwhile, programmers who have to use the name _g_a_m_m_a in its former sense, for what is now _l_g_a_m_m_a, have two choices: 1) Use the old math library, _l_i_b_o_m. 2) Add the following program to your others: #include double gamma(x) double x; { return (lgamma(x)); } DIAGNOSTICS The reserved operand is returned on a VAX for negative integer argu‐ ments, _e_r_r_n_o is set to ERANGE; for very large arguments over/underflows will occur inside the _l_g_a_m_m_a routine. SEE ALSO math(3M), infnan(3M) 4.3 Berkeley Distribution May 12, 1986 LGAMMA(3M)