You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2017/07/03 14:24:37 UTC
[3/5] commons-numbers git commit: NUMBER-46: Meaning of
"maxIterations" argument.
NUMBER-46: Meaning of "maxIterations" argument.
Project: http://git-wip-us.apache.org/repos/asf/commons-numbers/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-numbers/commit/bc83d14f
Tree: http://git-wip-us.apache.org/repos/asf/commons-numbers/tree/bc83d14f
Diff: http://git-wip-us.apache.org/repos/asf/commons-numbers/diff/bc83d14f
Branch: refs/heads/master
Commit: bc83d14fe2b7b4e86f6b01d37ce6b92bbf468916
Parents: 47e19ab
Author: Gilles Sadowski <gi...@harfang.homelinux.org>
Authored: Mon Jul 3 16:08:19 2017 +0200
Committer: Gilles Sadowski <gi...@harfang.homelinux.org>
Committed: Mon Jul 3 16:08:19 2017 +0200
----------------------------------------------------------------------
.../numbers/fraction/ContinuedFraction.java | 28 ++++++-------
.../numbers/fraction/ContinuedFractionTest.java | 44 +++++++++++++++++++-
2 files changed, 54 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/bc83d14f/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/ContinuedFraction.java
----------------------------------------------------------------------
diff --git a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/ContinuedFraction.java b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/ContinuedFraction.java
index 47bd9b9..5c5648d 100644
--- a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/ContinuedFraction.java
+++ b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/ContinuedFraction.java
@@ -80,7 +80,7 @@ public abstract class ContinuedFraction {
}
/**
- * Evaluates the continued fraction at the value x.
+ * Evaluates the continued fraction.
* <p>
* The implementation of this method is based on the modified Lentz algorithm as described
* on page 18 ff. in:
@@ -99,12 +99,13 @@ public abstract class ContinuedFraction {
* <a href="http://mathworld.wolfram.com/ContinuedFraction.html">Continued Fraction @ MathWorld</a>.
* </p>
*
- * @param x the evaluation point.
- * @param epsilon maximum error allowed.
- * @param maxIterations maximum number of convergents
- * @return the value of the continued fraction evaluated at x.
+ * @param x Point at which to evaluate the continued fraction.
+ * @param epsilon Maximum error allowed.
+ * @param maxIterations Maximum number of iterations.
+ * @return the value of the continued fraction evaluated at {@code x}.
* @throws ArithmeticException if the algorithm fails to converge.
- * @throws ArithmeticException if maximal number of iterations is reached
+ * @throws ArithmeticException if the maximal number of iterations is reached
+ * before the expected convergence is achieved.
*/
public double evaluate(double x, double epsilon, int maxIterations) {
final double small = 1e-50;
@@ -120,7 +121,7 @@ public abstract class ContinuedFraction {
double cPrev = hPrev;
double hN = hPrev;
- while (n < maxIterations) {
+ while (n <= maxIterations) {
final double a = getA(n, x);
final double b = getB(n, x);
@@ -146,21 +147,16 @@ public abstract class ContinuedFraction {
x);
}
- if (Math.abs(deltaN - 1.0) < epsilon) {
- break;
+ if (Math.abs(deltaN - 1) < epsilon) {
+ return hN;
}
dPrev = dN;
cPrev = cN;
hPrev = hN;
- n++;
- }
-
- if (n >= maxIterations) {
- throw new FractionException("maximal count ({0}) exceeded", maxIterations);
+ ++n;
}
- return hN;
+ throw new FractionException("maximal count ({0}) exceeded", maxIterations);
}
-
}
http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/bc83d14f/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/ContinuedFractionTest.java
----------------------------------------------------------------------
diff --git a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/ContinuedFractionTest.java b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/ContinuedFractionTest.java
index 8f450aa..8543f0a 100644
--- a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/ContinuedFractionTest.java
+++ b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/ContinuedFractionTest.java
@@ -28,8 +28,47 @@ public class ContinuedFractionTest {
@Test
public void testGoldenRatio() throws Exception {
ContinuedFraction cf = new ContinuedFraction() {
+ @Override
+ public double getA(int n, double x) {
+ return 1;
+ }
@Override
+ public double getB(int n, double x) {
+ return 1;
+ }
+ };
+
+ final double eps = 1e-8;
+ double gr = cf.evaluate(0, eps);
+ Assert.assertEquals(1.61803399, gr, eps);
+ }
+
+ // NUMBERS-46
+ @Test
+ public void testOneIteration() {
+ ContinuedFraction cf = new ContinuedFraction() {
+ @Override
+ public double getA(int n, double x) {
+ return 1;
+ }
+
+ @Override
+ public double getB(int n, double x) {
+ return 1;
+ }
+ };
+
+ final double eps = 10;
+ double gr = cf.evaluate(0, eps, 1);
+ Assert.assertEquals(1.61, gr, eps);
+ }
+
+ // NUMBERS-46
+ @Test
+ public void testTwoIterations() {
+ ContinuedFraction cf = new ContinuedFraction() {
+ @Override
public double getA(int n, double x) {
return 1;
}
@@ -40,7 +79,8 @@ public class ContinuedFractionTest {
}
};
- double gr = cf.evaluate(0.0, 1e-8);
- Assert.assertEquals(1.61803399, gr, 1e-8);
+ final double eps = 0.5;
+ double gr = cf.evaluate(0, eps, 2);
+ Assert.assertEquals(1.5, gr, 0d);
}
}