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


 
# syntax: GAWK -f GAMMA_FUNCTION.AWK
BEGIN {
    e = (1+1/100000)^100000
    pi = atan2(0,-1)
    leng = split("0.99999999999980993,676.5203681218851,-1259.1392167224028,771.32342877765313,-176.61502916214059,12.507343278686905,-0.13857109526572012,9.9843695780195716e-6,1.5056327351493116e-7",p,",")
    print("X    Stirling")
    for (i=1; i<=20; i++) {
      d = i / 10
      printf("%4.2f %9.5f\n",d,gamma_stirling(d))
    }
    exit(0)
}
function gamma_stirling(x) {
    return sqrt(2*pi/x) * pow(x/e,x)
}
function pow(a,b) {
    return exp(b*log(a))
}
 