gammaLn function

double gammaLn(
  1. num x
)

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);
}