gammaIncLower function

double gammaIncLower(
  1. double s,
  2. double z
)

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