laGamma function Null safety

double laGamma(
  1. 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;
}