This is an automated email from the ASF dual-hosted git repository.
erans pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-math.git
The following commit(s) were added to refs/heads/master by this push:
new a81b218 MATH-1388: Avoid risk of overflow.
a81b218 is described below
commit a81b218d47b54af46030f3ef4231f619899c5667
Author: Gilles Sadowski <[email protected]>
AuthorDate: Tue Dec 24 14:05:59 2019 +0100
MATH-1388: Avoid risk of overflow.
---
src/changes/changes.xml | 3 +++
.../math4/analysis/integration/MidPointIntegrator.java | 8 +++-----
.../math4/analysis/integration/TrapezoidIntegrator.java | 8 +++-----
.../math4/analysis/integration/MidPointIntegratorTest.java | 13 +++++++------
4 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 14d6071..dce0411 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -54,6 +54,9 @@ If the output is not quite correct, check for invisible
trailing spaces!
</release>
<release version="4.0" date="XXXX-XX-XX" description="">
+ <action dev="erans" type="fix" issue="MATH-1388">
+ Avoid overflow.
+ </action>
<action dev="erans" type="update" issue="MATH-1362">
Removed deprecated class "Incrementor" (replaced by
"IntegerSequence.Incrementor").
</action>
diff --git
a/src/main/java/org/apache/commons/math4/analysis/integration/MidPointIntegrator.java
b/src/main/java/org/apache/commons/math4/analysis/integration/MidPointIntegrator.java
index 08cc3cc..bb8b763 100644
---
a/src/main/java/org/apache/commons/math4/analysis/integration/MidPointIntegrator.java
+++
b/src/main/java/org/apache/commons/math4/analysis/integration/MidPointIntegrator.java
@@ -37,7 +37,7 @@ import org.apache.commons.math4.util.FastMath;
public class MidPointIntegrator extends BaseAbstractUnivariateIntegrator {
/** Maximum number of iterations for midpoint. */
- public static final int MIDPOINT_MAX_ITERATIONS_COUNT = 64;
+ private static final int MIDPOINT_MAX_ITERATIONS_COUNT = 63;
/**
* Build a midpoint integrator with given accuracies and iterations counts.
@@ -45,13 +45,12 @@ public class MidPointIntegrator extends
BaseAbstractUnivariateIntegrator {
* @param absoluteAccuracy absolute accuracy of the result
* @param minimalIterationCount minimum number of iterations
* @param maximalIterationCount maximum number of iterations
- * (must be less than or equal to {@link #MIDPOINT_MAX_ITERATIONS_COUNT}
* @exception NotStrictlyPositiveException if minimal number of iterations
* is not strictly positive
* @exception NumberIsTooSmallException if maximal number of iterations
* is lesser than or equal to the minimal number of iterations
* @exception NumberIsTooLargeException if maximal number of iterations
- * is greater than {@link #MIDPOINT_MAX_ITERATIONS_COUNT}
+ * is greater than 63.
*/
public MidPointIntegrator(final double relativeAccuracy,
final double absoluteAccuracy,
@@ -69,13 +68,12 @@ public class MidPointIntegrator extends
BaseAbstractUnivariateIntegrator {
* Build a midpoint integrator with given iteration counts.
* @param minimalIterationCount minimum number of iterations
* @param maximalIterationCount maximum number of iterations
- * (must be less than or equal to {@link #MIDPOINT_MAX_ITERATIONS_COUNT}
* @exception NotStrictlyPositiveException if minimal number of iterations
* is not strictly positive
* @exception NumberIsTooSmallException if maximal number of iterations
* is lesser than or equal to the minimal number of iterations
* @exception NumberIsTooLargeException if maximal number of iterations
- * is greater than {@link #MIDPOINT_MAX_ITERATIONS_COUNT}
+ * is greater than 63.
*/
public MidPointIntegrator(final int minimalIterationCount,
final int maximalIterationCount)
diff --git
a/src/main/java/org/apache/commons/math4/analysis/integration/TrapezoidIntegrator.java
b/src/main/java/org/apache/commons/math4/analysis/integration/TrapezoidIntegrator.java
index 2ccfed4..0d8a7fb 100644
---
a/src/main/java/org/apache/commons/math4/analysis/integration/TrapezoidIntegrator.java
+++
b/src/main/java/org/apache/commons/math4/analysis/integration/TrapezoidIntegrator.java
@@ -37,7 +37,7 @@ import org.apache.commons.math4.util.FastMath;
public class TrapezoidIntegrator extends BaseAbstractUnivariateIntegrator {
/** Maximum number of iterations for trapezoid. */
- public static final int TRAPEZOID_MAX_ITERATIONS_COUNT = 64;
+ private static final int TRAPEZOID_MAX_ITERATIONS_COUNT = 63;
/** Intermediate result. */
private double s;
@@ -48,13 +48,12 @@ public class TrapezoidIntegrator extends
BaseAbstractUnivariateIntegrator {
* @param absoluteAccuracy absolute accuracy of the result
* @param minimalIterationCount minimum number of iterations
* @param maximalIterationCount maximum number of iterations
- * (must be less than or equal to {@link #TRAPEZOID_MAX_ITERATIONS_COUNT}
* @exception NotStrictlyPositiveException if minimal number of iterations
* is not strictly positive
* @exception NumberIsTooSmallException if maximal number of iterations
* is lesser than or equal to the minimal number of iterations
* @exception NumberIsTooLargeException if maximal number of iterations
- * is greater than {@link #TRAPEZOID_MAX_ITERATIONS_COUNT}
+ * is greater than 63.
*/
public TrapezoidIntegrator(final double relativeAccuracy,
final double absoluteAccuracy,
@@ -72,13 +71,12 @@ public class TrapezoidIntegrator extends
BaseAbstractUnivariateIntegrator {
* Build a trapezoid integrator with given iteration counts.
* @param minimalIterationCount minimum number of iterations
* @param maximalIterationCount maximum number of iterations
- * (must be less than or equal to {@link #TRAPEZOID_MAX_ITERATIONS_COUNT}
* @exception NotStrictlyPositiveException if minimal number of iterations
* is not strictly positive
* @exception NumberIsTooSmallException if maximal number of iterations
* is lesser than or equal to the minimal number of iterations
* @exception NumberIsTooLargeException if maximal number of iterations
- * is greater than {@link #TRAPEZOID_MAX_ITERATIONS_COUNT}
+ * is greater than 63.
*/
public TrapezoidIntegrator(final int minimalIterationCount,
final int maximalIterationCount)
diff --git
a/src/test/java/org/apache/commons/math4/analysis/integration/MidPointIntegratorTest.java
b/src/test/java/org/apache/commons/math4/analysis/integration/MidPointIntegratorTest.java
index 4b476ce..9d1cf88 100644
---
a/src/test/java/org/apache/commons/math4/analysis/integration/MidPointIntegratorTest.java
+++
b/src/test/java/org/apache/commons/math4/analysis/integration/MidPointIntegratorTest.java
@@ -35,6 +35,7 @@ import org.junit.Test;
*
*/
public final class MidPointIntegratorTest {
+ private static final int NUM_ITER = 30;
/**
* Test of integrator for the sine function.
@@ -50,7 +51,7 @@ public final class MidPointIntegratorTest {
double tolerance = FastMath.abs(expected *
integrator.getRelativeAccuracy());
double result = integrator.integrate(Integer.MAX_VALUE, f, min, max);
Assert.assertTrue(integrator.getEvaluations() < Integer.MAX_VALUE / 2);
- Assert.assertTrue(integrator.getIterations() <
MidPointIntegrator.MIDPOINT_MAX_ITERATIONS_COUNT / 2);
+ Assert.assertTrue(integrator.getIterations() < NUM_ITER);
Assert.assertEquals(expected, result, tolerance);
}
@@ -69,7 +70,7 @@ public final class MidPointIntegratorTest {
double tolerance = FastMath.abs(expected *
integrator.getRelativeAccuracy());
double result = integrator.integrate(Integer.MAX_VALUE, f, min, max);
Assert.assertTrue(integrator.getEvaluations() < Integer.MAX_VALUE / 2);
- Assert.assertTrue(integrator.getIterations() <
MidPointIntegrator.MIDPOINT_MAX_ITERATIONS_COUNT / 2);
+ Assert.assertTrue(integrator.getIterations() < NUM_ITER);
Assert.assertEquals(expected, result, tolerance);
min = -FastMath.PI/3;
@@ -78,7 +79,7 @@ public final class MidPointIntegratorTest {
tolerance = FastMath.abs(expected * integrator.getRelativeAccuracy());
result = integrator.integrate(Integer.MAX_VALUE, f, min, max);
Assert.assertTrue(integrator.getEvaluations() < Integer.MAX_VALUE / 2);
- Assert.assertTrue(integrator.getIterations() <
MidPointIntegrator.MIDPOINT_MAX_ITERATIONS_COUNT / 2);
+ Assert.assertTrue(integrator.getIterations() < NUM_ITER);
Assert.assertEquals(expected, result, tolerance);
}
@@ -97,7 +98,7 @@ public final class MidPointIntegratorTest {
double tolerance = FastMath.abs(expected *
integrator.getRelativeAccuracy());
double result = integrator.integrate(Integer.MAX_VALUE, f, min, max);
Assert.assertTrue(integrator.getEvaluations() < Integer.MAX_VALUE / 2);
- Assert.assertTrue(integrator.getIterations() <
MidPointIntegrator.MIDPOINT_MAX_ITERATIONS_COUNT / 2);
+ Assert.assertTrue(integrator.getIterations() < NUM_ITER);
Assert.assertEquals(expected, result, tolerance);
min = 0;
@@ -106,7 +107,7 @@ public final class MidPointIntegratorTest {
tolerance = FastMath.abs(expected * integrator.getRelativeAccuracy());
result = integrator.integrate(Integer.MAX_VALUE, f, min, max);
Assert.assertTrue(integrator.getEvaluations() < Integer.MAX_VALUE / 2);
- Assert.assertTrue(integrator.getIterations() <
MidPointIntegrator.MIDPOINT_MAX_ITERATIONS_COUNT / 2);
+ Assert.assertTrue(integrator.getIterations() < NUM_ITER);
Assert.assertEquals(expected, result, tolerance);
min = -1;
@@ -115,7 +116,7 @@ public final class MidPointIntegratorTest {
tolerance = FastMath.abs(expected * integrator.getRelativeAccuracy());
result = integrator.integrate(Integer.MAX_VALUE, f, min, max);
Assert.assertTrue(integrator.getEvaluations() < Integer.MAX_VALUE / 2);
- Assert.assertTrue(integrator.getIterations() <
MidPointIntegrator.MIDPOINT_MAX_ITERATIONS_COUNT / 2);
+ Assert.assertTrue(integrator.getIterations() < NUM_ITER);
Assert.assertEquals(expected, result, tolerance);
}