tgamma function

double tgamma(
  1. double x
)

Implementation

double tgamma(double x) {
  if (x.isNaN) return double.nan;
  if (x.isInfinite) return x > 0 ? double.infinity : double.nan;
  if (x == 0.0) return signbit(x) ? double.negativeInfinity : double.infinity;
  if (x < 0 && x == x.floorToDouble()) return double.nan;

  if (x < 0.5) {
    return M_PI / (math.sin(M_PI * x) * tgamma(1 - x));
  }

  double z = x - 1;
  double sum = _lanczos_c[0];
  for (int i = 1; i < _lanczos_g + 2; i++) {
    sum += _lanczos_c[i] / (z + i);
  }
  double t = z + _lanczos_g + 0.5;
  return math.sqrt(2 * M_PI) *
      math.pow(t, z + 0.5).toDouble() *
      math.exp(-t) *
      sum;
}