diff --git a/src/java/org/apache/commons/math/distribution/BinomialDistributionImpl.java b/src/java/org/apache/commons/math/distribution/BinomialDistributionImpl.java
index 382eaf38b..a29a13a0c 100644
--- a/src/java/org/apache/commons/math/distribution/BinomialDistributionImpl.java
+++ b/src/java/org/apache/commons/math/distribution/BinomialDistributionImpl.java
@@ -24,7 +24,7 @@ import org.apache.commons.math.util.MathUtils;
/**
* The default implementation of {@link BinomialDistribution}.
*
- * @version $Revision: 1.17 $ $Date: 2004/07/23 05:22:36 $
+ * @version $Revision: 1.18 $ $Date: 2004/07/25 16:29:24 $
*/
public class BinomialDistributionImpl
extends AbstractDiscreteDistribution
@@ -162,6 +162,9 @@ public class BinomialDistributionImpl
/**
* For this distribution, X, this method returns the largest x, such
* that P(X ≤ x) ≤ p
.
+ *
+ * Returns -1
for p=0 and Integer.MAX_VALUE
for
+ * p=1.
*
* @param p the desired probability
* @return the largest x such that P(X ≤ x) <= p
@@ -172,7 +175,7 @@ public class BinomialDistributionImpl
public int inverseCumulativeProbability(final double p) throws MathException {
// handle extreme values explicitly
if (p == 0) {
- return 0;
+ return -1;
}
if (p == 1) {
return Integer.MAX_VALUE;
diff --git a/src/java/org/apache/commons/math/distribution/DiscreteDistribution.java b/src/java/org/apache/commons/math/distribution/DiscreteDistribution.java
index 8fb089390..c117a933d 100644
--- a/src/java/org/apache/commons/math/distribution/DiscreteDistribution.java
+++ b/src/java/org/apache/commons/math/distribution/DiscreteDistribution.java
@@ -20,7 +20,7 @@ import org.apache.commons.math.MathException;
/**
* Base interface for various discrete distributions.
*
- * @version $Revision: 1.15 $ $Date: 2004/06/23 16:26:15 $
+ * @version $Revision: 1.16 $ $Date: 2004/07/25 16:29:24 $
*/
public interface DiscreteDistribution {
/**
@@ -51,11 +51,26 @@ public interface DiscreteDistribution {
double cumulativeProbability(int x0, int x1) throws MathException;
/**
- * For this distribution, X, this method returns the largest x such that P(X ≤ x) <= p.
+ * For this distribution, X, this method returns the largest x such that
+ * P(X ≤ x) <= p.
+ *
+ * Note that this definition implies:
+ * - If there is a minimum value,
m
, with postive
+ * probablility under (the density of) X, then m - 1
is
+ * returned by inverseCumulativeProbability(0).
If there is
+ * no such value m, Integer.MIN_VALUE
is
+ * returned.
+ * - If there is a maximum value,
M
, such that
+ * P(X ≤ M) =1, then M
is returned by
+ * inverseCumulativeProbability(1).
+ * If there is no such value, M, Integer.MAX_VALUE
is
+ * returned.
+ *
* @param p the cumulative probability.
- * @return x.
+ * @return the largest x such that P(X ≤ x) <= p
* @throws MathException if the inverse cumulative probability can not be
* computed due to convergence or other numerical errors.
+ * @throws IllegalArgumentException if p is not between 0 and 1 (inclusive)
*/
int inverseCumulativeProbability(double p) throws MathException;
}
diff --git a/src/test/org/apache/commons/math/distribution/BinomialDistributionTest.java b/src/test/org/apache/commons/math/distribution/BinomialDistributionTest.java
index 56b1650de..666796a41 100644
--- a/src/test/org/apache/commons/math/distribution/BinomialDistributionTest.java
+++ b/src/test/org/apache/commons/math/distribution/BinomialDistributionTest.java
@@ -20,7 +20,7 @@ package org.apache.commons.math.distribution;
* Extends DiscreteDistributionAbstractTest. See class javadoc for
* DiscreteDistributionAbstractTest for details.
*
- * @version $Revision: 1.14 $ $Date: 2004/07/23 05:22:36 $
+ * @version $Revision: 1.15 $ $Date: 2004/07/25 16:29:25 $
*/
public class BinomialDistributionTest extends DiscreteDistributionAbstractTest {
@@ -69,7 +69,7 @@ public class BinomialDistributionTest extends DiscreteDistributionAbstractTest {
/** Creates the default inverse cumulative probability density test expected values */
public int[] makeInverseCumulativeTestValues() {
- return new int[] {0,1, 2, 3, 4, 4, 9, 9, 9, 8, 8, Integer.MAX_VALUE};
+ return new int[] {-1, 1, 2, 3, 4, 4, 9, 9, 9, 8, 8, Integer.MAX_VALUE};
}
//----------------- Additional test cases ---------------------------------
diff --git a/src/test/org/apache/commons/math/distribution/HypergeometricDistributionTest.java b/src/test/org/apache/commons/math/distribution/HypergeometricDistributionTest.java
index 8682435c9..19aaf676d 100644
--- a/src/test/org/apache/commons/math/distribution/HypergeometricDistributionTest.java
+++ b/src/test/org/apache/commons/math/distribution/HypergeometricDistributionTest.java
@@ -21,7 +21,7 @@ package org.apache.commons.math.distribution;
* Extends DiscreteDistributionAbstractTest. See class javadoc for
* DiscreteDistributionAbstractTest for details.
*
- * @version $Revision: 1.11 $ $Date: 2004/05/11 02:12:11 $
+ * @version $Revision: 1.12 $ $Date: 2004/07/25 16:29:25 $
*/
public class HypergeometricDistributionTest extends DiscreteDistributionAbstractTest {
@@ -64,13 +64,13 @@ public class HypergeometricDistributionTest extends DiscreteDistributionAbstract
/** Creates the default inverse cumulative probability test input values */
public double[] makeInverseCumulativeTestPoints() {
- return new double[] {0.001d, 0.010d, 0.025d, 0.050d, 0.100d, 0.999d,
- 0.990d, 0.975d, 0.950d, 0.900d};
+ return new double[] {0d, 0.001d, 0.010d, 0.025d, 0.050d, 0.100d, 0.999d,
+ 0.990d, 0.975d, 0.950d, 0.900d, 1d};
}
/** Creates the default inverse cumulative probability density test expected values */
public int[] makeInverseCumulativeTestValues() {
- return new int[] {-1, 0, 0, 0, 0, 4, 3, 3, 3, 3};
+ return new int[] {-1, -1, 0, 0, 0, 0, 4, 3, 3, 3, 3, 5};
}
//-------------------- Additional test cases ------------------------------