tgamma function
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;
}