gammaIncLower function
The regularized lower incomplete gamma function. Code kanged from SAMTools: https://github.com/lh3/samtools/blob/master/bcftools/kfunc.c
Implementation
double gammaIncLower(double s, double z) {
const double _gammaEpsilon = 1e-14;
double x = 1.0;
double sum = 1.0;
for (double k = 1.0; k < 100; k++) {
x *= z / (s + k);
sum += x;
if (x / sum < _gammaEpsilon) {
break;
}
}
final double lgam = lgamma(s + 1).lgamma;
return math.exp((s * math.log(z)) - z - lgam + math.log(sum));
}