### Question:
AseMle { protected static double lnbico(final int n, final int k) { if (n < 0 || k < 0 || k > n) { throw new IllegalArgumentException("bad args in bico"); } if (n < 171) { return Math.log(Math.floor(0.5 + factrl(n) / (factrl(k) * factrl(n - k)))); } return factln(n) - factln(k) - factln(n - k); } AseMle(IntArrayList a1Counts, IntArrayList a2Counts); double getMaxLikelihood(); double getMaxLikelihoodP(); double getRatioD(); double getRatioP();  }### Answer:
@Test public void testLnBico() { assertEquals(AseMle.lnbico(1369, 689), 945.052036055064, 0.000001); assertEquals(AseMle.lnbico(12345, 6789), 8490.2927640914, 0.000001); assertEquals(AseMle.lnbico(123456, 67890), 84950.948114749, 0.000001); assertEquals(AseMle.lnbico(20, 10), 12.126791314602454, 0.000001); assertEquals(AseMle.lnbico(200, 10), 37.6501117434664266, 0.000001); }