static double logBinomialProbability()

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