Author: psteitz
Date: Fri Jul 11 19:22:18 2014
New Revision: 1609775
URL: http://svn.apache.org/r1609775
Log:
Fixed BinomialDistribution to deal with degenerate cases correctly.
JIRA: MATH-1136
Reported and patched by Aleksei Dievskii.
Modified:
commons/proper/math/trunk/src/changes/changes.xml
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/BinomialDistribution.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/distribution/BinomialDistributionTest.java
Modified: commons/proper/math/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/changes/changes.xml?rev=1609775&r1=1609774&r2=1609775&view=diff
==============================================================================
--- commons/proper/math/trunk/src/changes/changes.xml (original)
+++ commons/proper/math/trunk/src/changes/changes.xml Fri Jul 11 19:22:18 2014
@@ -73,6 +73,9 @@ Users are encouraged to upgrade to this
2. A few methods in the FastMath class are in fact slower that their
counterpart in either Math or StrictMath (cf. MATH-740 and MATH-901).
">
+ <ation dev="psteitz" type="fix" issue="MATH-1136" due-to="Aleksei
Dievskii">
+ Fixed BinomialDistribution to deal with degenerate cases correctly.
+ </action>
<action dev="tn" type="fix" issue="MATH-1135" due-to="Guillaume Marceau">
"MonotoneChain" failed to generate a convex hull if only a minimal hull
shall be created (includeCollinearPoints=false) and collinear hull
points
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/BinomialDistribution.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/BinomialDistribution.java?rev=1609775&r1=1609774&r2=1609775&view=diff
==============================================================================
---
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/BinomialDistribution.java
(original)
+++
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/BinomialDistribution.java
Fri Jul 11 19:22:18 2014
@@ -106,6 +106,9 @@ public class BinomialDistribution extend
/** {@inheritDoc} **/
@Override
public double logProbability(int x) {
+ if (numberOfTrials == 0) {
+ return (x == 0) ? 0. : Double.NEGATIVE_INFINITY;
+ }
double ret;
if (x < 0 || x > numberOfTrials) {
ret = Double.NEGATIVE_INFINITY;
Modified:
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/distribution/BinomialDistributionTest.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/distribution/BinomialDistributionTest.java?rev=1609775&r1=1609774&r2=1609775&view=diff
==============================================================================
---
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/distribution/BinomialDistributionTest.java
(original)
+++
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/distribution/BinomialDistributionTest.java
Fri Jul 11 19:22:18 2014
@@ -127,6 +127,24 @@ public class BinomialDistributionTest ex
Assert.assertEquals(dist.getSupportUpperBound(), 5);
}
+ /** Test degenerate case n = 0 */
+ @Test
+ public void testDegenerate2() {
+ BinomialDistribution dist = new BinomialDistribution(0, 0.01d);
+ setDistribution(dist);
+ setCumulativeTestPoints(new int[] { -1, 0, 1, 2, 5, 10 });
+ setCumulativeTestValues(new double[] { 0d, 1d, 1d, 1d, 1d, 1d });
+ setDensityTestPoints(new int[] { -1, 0, 1, 2, 5, 10 });
+ setDensityTestValues(new double[] { 0d, 1d, 0d, 0d, 0d, 0d });
+ setInverseCumulativeTestPoints(new double[] { 0.1d, 0.5d });
+ setInverseCumulativeTestValues(new int[] { 0, 0 });
+ verifyDensities();
+ verifyCumulativeProbabilities();
+ verifyInverseCumulativeProbabilities();
+ Assert.assertEquals(dist.getSupportLowerBound(), 0);
+ Assert.assertEquals(dist.getSupportUpperBound(), 0);
+ }
+
@Test
public void testMoments() {
final double tol = 1e-9;