Task

Implement one algorithm (or more) to compute the Gamma (



Γ


{\displaystyle \Gamma }

) function (in the real field only).

If your language has the function as built-in or you know a library which has it, compare your implementation's results with the results of the built-in/library function.

The Gamma function can be defined as:

  



Γ
(
x
)
=


∫

0


∞



t

x
−
1



e

−
t


d
t



{\displaystyle \Gamma (x)=\displaystyle \int _{0}^{\infty }t^{x-1}e^{-t}dt}


This suggests a straightforward (but inefficient) way of computing the 



Γ


{\displaystyle \Gamma }

 through numerical integration.



Better suggested methods:

 Lanczos approximation
 Stirling's approximation


function g = lacz_gamma(a, cg=7)
  p = [ 0.99999999999980993, 676.5203681218851, -1259.1392167224028, \
        771.32342877765313, -176.61502916214059, 12.507343278686905, \
        -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7 ];
  x=a;
  if ( x < 0.5 )
    g = pi / ( sin(pi*x) * lacz_gamma(1.0-x) );
  else
    x = x - 1.0;
    t = p(1);
    for i=1:(cg+1)
      t = t + p(i+1)/(x+function/double.html">double(i));
    endfor
    w = x + function/double.html">double(cg) + 0.5;
    g = sqrt(2.0*pi) * w**(x+0.5) * exp(-w) * t;
  endif
endfunction
 
 
for i = 1:10
  printf("%f %f\n", gamma(i/3.0), lacz_gamma(i/3.0));
endfor