in commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/SaddlePointExpansionUtils.java [153:175]
static double logBinomialProbability(int x, int n, double p, double q) {
if (x == 0) {
if (p < ONE_TENTH) {
// Subtract from 0 avoids returning -0.0 for p=0.0
return 0.0 - getDeviancePart(n, n * q) - n * p;
} else if (n == 0) {
return 0;
}
return n * Math.log(q);
} else if (x == n) {
if (q < ONE_TENTH) {
// Subtract from 0 avoids returning -0.0 for p=1.0
return 0.0 - getDeviancePart(n, n * p) - n * q;
}
return n * Math.log(p);
}
final int nMx = n - x;
final double ret = getStirlingError(n) - getStirlingError(x) -
getStirlingError(nMx) - getDeviancePart(x, n * p) -
getDeviancePart(nMx, n * q);
final double f = (TWO_PI * x * nMx) / n;
return -0.5 * Math.log(f) + ret;
}