# lgamma(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)'

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.            |
|_____________________________|_____________________________|

```

```     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

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