/** * @param n total elements * @param k chosen elements * @return Binomial coefficient n choose k */ public static double choose(double n, double k) { n = Math.floor(n + 0.5); k = Math.floor(k + 0.5); final double lchoose = GammaFunction.lnGamma(n + 1.0) - GammaFunction.lnGamma(k + 1.0) - GammaFunction.lnGamma(n - k + 1.0); return Math.floor(Math.exp(lchoose) + 0.5); }
public static double logChoose(final int n, final int k) { return GammaFunction.lnGamma(n + 1.0) - GammaFunction.lnGamma(k + 1.0) - GammaFunction.lnGamma(n - k + 1.0); }