laGamma function Null safety
- double x
Port of Java implementation of Lanczos approximation of the Gamma function, from https://rosettacode.org/wiki/Gamma_function#Java. It is offered under CC BY-SA 4.0 - https://creativecommons.org/licenses/by-sa/4.0/
Implementation
double laGamma(double x) {
const p = [
0.99999999999980993,
676.5203681218851,
-1259.1392167224028,
771.32342877765313,
-176.61502916214059,
12.507343278686905,
-0.13857109526572012,
9.9843695780195716e-6,
1.5056327351493116e-7
];
int g = 7;
if (x < 0.5) {
return pi / (sin(pi * x) * laGamma(1 - x));
}
x -= 1;
double a = p[0];
double t = x + g + 0.5;
for (int i = 1; i < p.length; i++) {
a += p[i] / (x + i);
}
return sqrt(2 * pi) * pow(t, x + 0.5) * exp(-t) * a;
}