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


print " x       Stirling         Lanczos"
print
for i = 1 to 20
    d = i / 10.0
    print d;
    print chr(9); ljust(string(gammaStirling(d)), 13, "0");
    print chr(9); ljust(string(gammaLanczos(d)),  13, "0")
next i
end 
 
function gammaStirling (x)
    e = exp(1)	# e is not predefined in BASIC256
    return sqr(2.0 * pi / x) * ((x / e) ^ x)
end function
 
function gammaLanczos (x)
    dim p = {0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313, -176.61502916214059, 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7}
 
    g = 7
    if x < 0.5 then return pi / (sin(pi * x) * gammaLanczos(1-x))
    x -= 1
    a = p[0]
    t = x + g + 0.5
 
    for i = 1 to 8
	a += p[i] / (x + i)
    next i
    return sqr(2.0 * pi) * (t ^ (x + 0.5)) * exp(-t) * a
end function