Fixed AbstractIntegerDistribution cumulativeProbablility(-,-)
to correctly handle double arguments. JIRA: MATH-184 Reported by Yegor Bryukhov git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@620368 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3c9e28e533
commit
8eba63863c
|
@ -60,6 +60,34 @@ public abstract class AbstractIntegerDistribution extends AbstractDistribution
|
||||||
return cumulativeProbability((int) Math.floor(x));
|
return cumulativeProbability((int) Math.floor(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For a random variable X whose values are distributed according
|
||||||
|
* to this distribution, this method returns P(x0 ≤ X ≤ x1).
|
||||||
|
*
|
||||||
|
* @param x0 the (inclusive) lower bound
|
||||||
|
* @param x1 the (inclusive) upper bound
|
||||||
|
* @return the probability that a random variable with this distribution
|
||||||
|
* will take a value between <code>x0</code> and <code>x1</code>,
|
||||||
|
* including the endpoints.
|
||||||
|
* @throws MathException if the cumulative probability can not be
|
||||||
|
* computed due to convergence or other numerical errors.
|
||||||
|
* @throws IllegalArgumentException if <code>x0 > x1</code>
|
||||||
|
*/
|
||||||
|
public double cumulativeProbability(double x0, double x1)
|
||||||
|
throws MathException {
|
||||||
|
if (x0 > x1) {
|
||||||
|
throw new IllegalArgumentException
|
||||||
|
("lower endpoint must be less than or equal to upper endpoint");
|
||||||
|
}
|
||||||
|
if (Math.floor(x0) < x0) {
|
||||||
|
return cumulativeProbability(((int) Math.floor(x0)) + 1,
|
||||||
|
(int) Math.floor(x1)); // don't want to count mass below x0
|
||||||
|
} else { // x0 is mathematical integer, so use as is
|
||||||
|
return cumulativeProbability((int) Math.floor(x0),
|
||||||
|
(int) Math.floor(x1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For a random variable X whose values are distributed according
|
* For a random variable X whose values are distributed according
|
||||||
* to this distribution, this method returns P(X ≤ x). In other words,
|
* to this distribution, this method returns P(X ≤ x). In other words,
|
||||||
|
|
|
@ -168,6 +168,10 @@ Commons Math Release Notes</title>
|
||||||
Added getSumOfLogs method to SummaryStatistics and made SumOfLogs
|
Added getSumOfLogs method to SummaryStatistics and made SumOfLogs
|
||||||
instance used by GeometricMean configurable.
|
instance used by GeometricMean configurable.
|
||||||
</action>
|
</action>
|
||||||
|
<action dev="psteitz" type="fix" issue="MATH-184" due-to="Yegor Bryukhov">
|
||||||
|
Fixed AbstractIntegerDistribution cumulativeProbablility(-,-)
|
||||||
|
to correctly handle double arguments.
|
||||||
|
</action>
|
||||||
</release>
|
</release>
|
||||||
<release version="1.1" date="2005-12-17"
|
<release version="1.1" date="2005-12-17"
|
||||||
description="This is a maintenance release containing bug fixes and enhancements.
|
description="This is a maintenance release containing bug fixes and enhancements.
|
||||||
|
|
|
@ -156,6 +156,7 @@ public abstract class IntegerDistributionAbstractTest extends TestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifies that inverse cumulative probability density calculations match expected values
|
* Verifies that inverse cumulative probability density calculations match expected values
|
||||||
* using current test instance data
|
* using current test instance data
|
||||||
|
@ -186,6 +187,55 @@ public abstract class IntegerDistributionAbstractTest extends TestCase {
|
||||||
verifyCumulativeProbabilities();
|
verifyCumulativeProbabilities();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies that floating point arguments are correctly handled by
|
||||||
|
* cumulativeProbablility(-,-)
|
||||||
|
* JIRA: MATH-184
|
||||||
|
*/
|
||||||
|
public void testFloatingPointArguments() throws Exception {
|
||||||
|
for (int i = 0; i < cumulativeTestPoints.length; i++) {
|
||||||
|
double arg = (double) cumulativeTestPoints[i];
|
||||||
|
assertEquals(
|
||||||
|
"Incorrect cumulative probability value returned for " +
|
||||||
|
cumulativeTestPoints[i],
|
||||||
|
cumulativeTestValues[i],
|
||||||
|
distribution.cumulativeProbability(arg), tolerance);
|
||||||
|
if (i < cumulativeTestPoints.length - 1) {
|
||||||
|
double arg2 = (double) cumulativeTestPoints[i + 1];
|
||||||
|
assertEquals("Inconsistent probability for discrete range " +
|
||||||
|
"[ " + arg + "," + arg2 + " ]",
|
||||||
|
distribution.cumulativeProbability(
|
||||||
|
cumulativeTestPoints[i],
|
||||||
|
cumulativeTestPoints[i + 1]),
|
||||||
|
distribution.cumulativeProbability(arg, arg2), tolerance);
|
||||||
|
arg = arg - Math.random();
|
||||||
|
arg2 = arg2 + Math.random();
|
||||||
|
assertEquals("Inconsistent probability for discrete range " +
|
||||||
|
"[ " + arg + "," + arg2 + " ]",
|
||||||
|
distribution.cumulativeProbability(
|
||||||
|
cumulativeTestPoints[i],
|
||||||
|
cumulativeTestPoints[i + 1]),
|
||||||
|
distribution.cumulativeProbability(arg, arg2), tolerance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int one = 1;
|
||||||
|
int ten = 10;
|
||||||
|
int two = 2;
|
||||||
|
double oned = (double) one;
|
||||||
|
double twod = (double) two;
|
||||||
|
double tend = (double) ten;
|
||||||
|
assertEquals(distribution.cumulativeProbability(one, two),
|
||||||
|
distribution.cumulativeProbability(oned, twod), tolerance);
|
||||||
|
assertEquals(distribution.cumulativeProbability(one, two),
|
||||||
|
distribution.cumulativeProbability(oned - tolerance,
|
||||||
|
twod + 0.9), tolerance);
|
||||||
|
assertEquals(distribution.cumulativeProbability(two, ten),
|
||||||
|
distribution.cumulativeProbability(twod, tend), tolerance);
|
||||||
|
assertEquals(distribution.cumulativeProbability(two, ten),
|
||||||
|
distribution.cumulativeProbability(twod - tolerance,
|
||||||
|
tend + 0.9), tolerance);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifies that inverse cumulative probability density calculations match expected values
|
* Verifies that inverse cumulative probability density calculations match expected values
|
||||||
* using default test instance data
|
* using default test instance data
|
||||||
|
|
Loading…
Reference in New Issue