gamma_r(3M)




NAME

     lgamma, lgamma_r, gamma, gamma_r - log gamma function


SYNOPSIS

     cc [ flag ... ] file ... -lm [ library ... ]
     #include <math.h>
     extern int signgam;

     double lgamma(double x);

     double gamma(double x);

     double lgamma_r(double x, int *signgamp);

     double gamma_r(double x, int *signgamp);


DESCRIPTION

     The lgamma(), gamma(), lgamma_r(), and  gamma_r()  functions
     return

     ln||~(x)|

     where

     |~(x) = integral from 0 to +Infinity  of  pow(t,x-1)*exp(-t)
     dt

     for x > 0 and

     |~(x) = n/(|~(1-x)sin(nx))

     for x < 1.

     The lgamma() and gamma() functions use the external  integer
     signgam  to  return  the  sign of |~(x) while lgamma_r() and
     gamma_r()  use  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 that |~(x) must overflow when x is large enough, under-
     flow when -x is large enough, and generate a division  by  0
     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.


ATTRIBUTES

     See attributes(5) for descriptions of the  following  attri-
     butes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | MT-Level                    | See NOTES below.            |
    |_____________________________|_____________________________|


SEE ALSO

     matherr(3M), attributes(5), standards(5)


NOTES

     Although lgamma_r() is not mentioned by  POSIX  1003.1c,  it
     was  added to complete the functionality provided by similar
     thread-safe functions.

     The gamma() function is currently maintained for compatibil-
     ity  with  SVID3. See standards(5). The gamma() function and
     the gamma_r() function may be removed from a future release.
     The   lgamma()  and  lgamma_r()  functions  should  be  used
     instead.

     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.

     The lgamma() function is unsafe  in  multithreaded  applica-
     tions. The lgamma_r() function should be used instead.


Man(1) output converted with man2html