s Chapter Contents
s Chapter Introduction
NAG C Library Manual

# NAG Library Function Documentnag_gamma (s14aac)

## 1  Purpose

nag_gamma (s14aac) returns the value of the Gamma function $\Gamma \left(x\right)$.

## 2  Specification

 #include #include
 double nag_gamma (double x, NagError *fail)

## 3  Description

nag_gamma (s14aac) evaluates
 $Γ x = ∫ 0 ∞ t x-1 e -t dt .$
The function is based on a Chebyshev expansion for $\Gamma \left(1+u\right)$, and uses the property $\Gamma \left(1+x\right)=x\Gamma \left(x\right)$. If $x=N+1+u$ where $N$ is integral and $0\le u<1$ then it follows that:
• for $N>0\text{ }\Gamma \left(x\right)=\left(x-1\right)\left(x-2\right)\cdots \left(x-N\right)\Gamma \left(1+u\right)$
• for $N=0\text{ }\Gamma \left(x\right)=\Gamma \left(1+u\right)$
• for $N<0\text{ }\Gamma \left(x\right)=\Gamma \left(1+u\right)/x\left(x+1\right)\left(x+2\right)\cdots \left(x-N-1\right)$.
There are four possible failures for this function:
 (i) if $x$ is too large, there is a danger of overflow since $\Gamma \left(x\right)$ could become too large to be represented in the machine; (ii) if $x$ is too large and negative, there is a danger of underflow; (iii) if $x$ is equal to a negative integer, $\Gamma \left(x\right)$ would overflow since it has poles at such points; (iv) if $x$ is too near zero, there is again the danger of overflow on some machines.
For small $x$, $\Gamma \left(x\right)\simeq 1/x$, and on some machines there exists a range of nonzero but small values of $x$ for which $1/x$ is larger than the greatest representable value.

## 4  References

Abramowitz M and Stegun I A (1972) Handbook of Mathematical Functions (3rd Edition) Dover Publications

## 5  Arguments

1:     xdoubleInput
On entry: the argument $x$ of the function.
Constraint: x must not be zero or a negative integer.
2:     failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_REAL_ARG_GT
On entry, ${\mathbf{x}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{x}}\le 〈\mathit{\text{value}}〉$.
The argument is too large, the function returns the approximate value of $\Gamma \left(x\right)$ at the nearest valid argument.
NE_REAL_ARG_LT
On entry, x must not be less than $〈\mathit{\text{value}}〉$: ${\mathbf{x}}=〈\mathit{\text{value}}〉$.
The argument is too large and negative, the function returns zero.
NE_REAL_ARG_NEG_INT
On entry, x must not be effectively a negative integer: ${\mathbf{x}}=〈\mathit{\text{value}}〉$.
The argument is a negative integer, at which values $\Gamma \left(x\right)$ is infinite. The function returns a large positive value.
NE_REAL_ARG_TOO_SMALL
On entry, x must be greater than $〈\mathit{\text{value}}〉$: ${\mathbf{x}}=〈\mathit{\text{value}}〉$.
The argument is too close to zero, the function returns the approximate value of $\Gamma \left(x\right)$ at the nearest valid argument.

## 7  Accuracy

Let $\delta$ and $\epsilon$ be the relative errors in the argument and the result respectively. If $\delta$ is somewhat larger than the machine precision (i.e., is due to data errors etc.), then $\epsilon$ and $\delta$ are approximately related by $\epsilon \simeq \left|x\psi \left(x\right)\right|\delta$ (provided $\epsilon$ is also greater than the representation error). Here $\psi \left(x\right)$ is the digamma function ${\Gamma }^{\prime }\left(x\right)/\Gamma \left(x\right)$.
If $\delta$ is of the same order as machine precision, then rounding errors could make $\epsilon$ slightly larger than the above relation predicts.
There is clearly a severe, but unavoidable, loss of accuracy for arguments close to the poles of $\Gamma \left(x\right)$ at negative integers. However, relative accuracy is preserved near the pole at $x=0$ right up to the point of failure arising from the danger of setting overflow.
Also accuracy will necessarily be lost as $x$ becomes large since in this region $\epsilon \simeq \delta x\mathrm{ln}x$. However, since $\Gamma \left(x\right)$ increases rapidly with $x$, the function must fail due to the danger of setting overflow before this loss of accuracy is too great. For example, for $x=20$, the amplification factor $\simeq 60$.

None.

## 9  Example

The following program reads values of the argument $x$ from a file, evaluates the function at each value of $x$ and prints the results.

### 9.1  Program Text

Program Text (s14aace.c)

### 9.2  Program Data

Program Data (s14aace.d)

### 9.3  Program Results

Program Results (s14aace.r)