4.3BSD-UWisc/man/cat3/lgamma.3m




LGAMMA(3M)          UNIX Programmer's Manual           LGAMMA(3M)



NAME
     lgamma - log gamma function

SYNOPSIS
     #include <math.h>

     double lgamma(x)
     double x;

DESCRIPTION
     Lgamma returns ln|G(x)|.

     The external integer signgam returns the sign of G(x) .

IDIOSYNCRASIES
     Do not use the expression signgam*exp(lgamma(x)) to compute
     g := 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 G(x) must overflow when x is large enough, under-
     flow 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 lnG.  Elsewhere, for instance in IBM's FORTRAN
     library, the name GAMMA belongs to G and the name ALGAMA to
     lnG 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(G(|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 inaccurate
     values when x is almost a negative integer, and lets G(x) be
     computed 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 rehabili-
     tated 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:



Printed 12/27/86          May 12, 1986                          1






LGAMMA(3M)          UNIX Programmer's Manual           LGAMMA(3M)



        #include <math.h>
        double gamma(x)
        double x;
        {
             return (lgamma(x));
        }

DIAGNOSTICS
     The reserved operand is returned on a VAX for negative
     integer arguments, _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 rou-
     tine.

SEE ALSO
     math(3M), infnan(3M)








































Printed 12/27/86          May 12, 1986                          2