You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2008/02/02 17:39:19 UTC
svn commit: r617826 - in
/commons/proper/math/trunk/src/java/org/apache/commons/math:
analysis/BrentSolver.java analysis/MullerSolver.java util/MathUtils.java
Author: luc
Date: Sat Feb 2 08:39:18 2008
New Revision: 617826
URL: http://svn.apache.org/viewvc?rev=617826&view=rev
Log:
added comments in the code to explain use of real number equality tests
JIRA: MATH-183
Modified:
commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BrentSolver.java
commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/MullerSolver.java
commons/proper/math/trunk/src/java/org/apache/commons/math/util/MathUtils.java
Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BrentSolver.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BrentSolver.java?rev=617826&r1=617825&r2=617826&view=diff
==============================================================================
--- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BrentSolver.java (original)
+++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/BrentSolver.java Sat Feb 2 08:39:18 2008
@@ -202,6 +202,9 @@
double r3 = y1 / y0;
double p;
double p1;
+ // the equality test (x0 == x2) is intentional,
+ // it is part of the original Brent's method,
+ // it should NOT be replaced by proximity test
if (x0 == x2) {
// Linear interpolation.
p = dx * r3;
Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/MullerSolver.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/MullerSolver.java?rev=617826&r1=617825&r2=617826&view=diff
==============================================================================
--- commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/MullerSolver.java (original)
+++ commons/proper/math/trunk/src/java/org/apache/commons/math/analysis/MullerSolver.java Sat Feb 2 08:39:18 2008
@@ -153,6 +153,8 @@
// Bisect if convergence is too slow. Bisection would waste
// our calculation of x, hopefully it won't happen often.
+ // the real number equality test x == x1 is intentional and
+ // completes the proximity tests above it
boolean bisect = (x < x1 && (x1 - x0) > 0.95 * (x2 - x0)) ||
(x > x1 && (x2 - x1) > 0.95 * (x2 - x0)) ||
(x == x1);
@@ -244,7 +246,8 @@
}
if (denominator != 0) {
x = x2 - 2.0 * C * (x2 - x1) / denominator;
- // perturb x if it coincides with x1 or x2
+ // perturb x if it exactly coincides with x1 or x2
+ // the equality tests here are intentional
while (x == x1 || x == x2) {
x += absoluteAccuracy;
}
Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/util/MathUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/util/MathUtils.java?rev=617826&r1=617825&r2=617826&view=diff
==============================================================================
--- commons/proper/math/trunk/src/java/org/apache/commons/math/util/MathUtils.java (original)
+++ commons/proper/math/trunk/src/java/org/apache/commons/math/util/MathUtils.java Sat Feb 2 08:39:18 2008
@@ -784,6 +784,7 @@
} else if (fraction < 0.5) {
unscaled = Math.floor(unscaled);
} else {
+ // The following equality test is intentional and needed for rounding purposes
if (Math.floor(unscaled) / 2.0 == Math.floor(Math
.floor(unscaled) / 2.0)) { // even
unscaled = Math.floor(unscaled);