A Stirling series approximation of the gamma function.

View versions (2)

Interface

#include <codecogs/maths/special/gamma/loggamma_simple.h>

using namespace Maths::Special::Gamma;

Returns a simple approximation to the log-gamma functions. If your only interested in low levels of accuracy (10 significant figures), then this solution is evaluated quickly and is relatively stable.

This approximation is achieved using a Lanczos approximation, which provides a solution given by the analytic expression

$$\ln \Gamma(x) = (x + \frac{1}{2}) \ln(x + 5.5) - (x + 5.5) + \ln \left( \frac{1}{x} \left[ c_0 + \frac{c_1}{x+1} + \frac{c_2}{x+2} + \frac{c_3}{x+3} + \frac{c_4}{x+4} + \frac{c_5}{x+5} + \frac{c_6}{x+6} \right] \right)$$
(1)

for the constants $c_0 \ldots c_6$ used in the implementation below.

For the true Stirling series approximation see log_gamma_stirling

Example 1

#include <codecogs/maths/special/gamma/loggamma_simple.h>
#include <codecogs/maths/special/gamma/log_gamma_stirling.h>
#include <stdio.h>

int main()
{
  for(double x=3; x<5; x+=0.3)
    printf("\n x=%lf logGamma_simple=%lf  log_gamma_stirling=%lf",x, Maths::Special::Gamma::logGamma_simple(x),
           Maths::Special::Gamma::log_gamma_stirling(x));
  return 0;
}

Output:

x=3.000000 logGamma_simple=0.693147  log_gamma_stirling=0.693147
x=3.300000 logGamma_simple=0.987099  log_gamma_stirling=0.987099
x=3.600000 logGamma_simple=1.312923  log_gamma_stirling=1.312923
x=3.900000 logGamma_simple=1.667580  log_gamma_stirling=1.667580
x=4.200000 logGamma_simple=2.048556  log_gamma_stirling=2.048556
x=4.500000 logGamma_simple=2.453737  log_gamma_stirling=2.453737
x=4.800000 logGamma_simple=2.881323  log_gamma_stirling=2.881323

Parameters

x
argument
GPL Licence — free for non commercial use. See Licence details.

Interactive Calculator

x
Result