gammaLn function
Returns the natural logarithm of the gamma function.
Implementation
double gammaLn(num x) {
const g = 607 / 128;
const p = [
0.99999999999999709182,
57.156235665862923517,
-59.597960355475491248,
14.136097974741747174,
-0.49191381609762019978,
0.33994649984811888699e-4,
0.46523628927048575665e-4,
-0.98374475304879564677e-4,
0.15808870322491248884e-3,
-0.21026444172410488319e-3,
0.21743961811521264320e-3,
-0.16431810653676389022e-3,
0.84418223983852743293e-4,
-0.26190838401581408670e-4,
0.36899182659531622704e-5,
];
if (x <= 0.0) {
return double.nan;
}
var y = p[0];
for (var i = p.length - 1; i > 0; --i) {
y += p[i] / (x + i);
}
final t = x + g + 0.5;
return 0.5 * log(2.0 * pi) + (x + 0.5) * log(t) - t + log(y) - log(x);
}