Repository: commons-complex Updated Branches: refs/heads/master b206d9c80 -> 0d64d85ed
COMPLEX-4: When complex 0 is rasied to a positive (real) exponent, return zero. Project: http://git-wip-us.apache.org/repos/asf/commons-complex/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-complex/commit/2b29ed84 Tree: http://git-wip-us.apache.org/repos/asf/commons-complex/tree/2b29ed84 Diff: http://git-wip-us.apache.org/repos/asf/commons-complex/diff/2b29ed84 Branch: refs/heads/master Commit: 2b29ed84c9461fba037b8ebfd8a39637c08b6b3e Parents: b206d9c Author: Ray DeCampo <[email protected]> Authored: Sun Jan 8 12:00:34 2017 -0500 Committer: Ray DeCampo <[email protected]> Committed: Sun Jan 8 12:00:34 2017 -0500 ---------------------------------------------------------------------- .../java/org/apache/commons/complex/Complex.java | 18 ++++++++++++++++++ .../org/apache/commons/complex/ComplexTest.java | 10 +++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-complex/blob/2b29ed84/src/main/java/org/apache/commons/complex/Complex.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/complex/Complex.java b/src/main/java/org/apache/commons/complex/Complex.java index 937820d..1313d8a 100644 --- a/src/main/java/org/apache/commons/complex/Complex.java +++ b/src/main/java/org/apache/commons/complex/Complex.java @@ -864,6 +864,15 @@ public class Complex implements Serializable { */ public Complex pow(Complex x) { checkNotNull(x); + if (real == 0 && imaginary == 0) { + if (x.real > 0 && x.imaginary == 0) { + // 0 raised to positive number is 0 + return ZERO; + } else { + // 0 raised to anything else is NaN + return NaN; + } + } return this.log().multiply(x).exp(); } @@ -875,6 +884,15 @@ public class Complex implements Serializable { * @see #pow(Complex) */ public Complex pow(double x) { + if (real == 0 && imaginary == 0) { + if (x > 0) { + // 0 raised to positive number is 0 + return ZERO; + } else { + // 0 raised to anything else is NaN + return NaN; + } + } return this.log().multiply(x).exp(); } http://git-wip-us.apache.org/repos/asf/commons-complex/blob/2b29ed84/src/test/java/org/apache/commons/complex/ComplexTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/complex/ComplexTest.java b/src/test/java/org/apache/commons/complex/ComplexTest.java index 9f5cd22..a7abc48 100644 --- a/src/test/java/org/apache/commons/complex/ComplexTest.java +++ b/src/test/java/org/apache/commons/complex/ComplexTest.java @@ -936,8 +936,10 @@ public class ComplexTest { @Test public void testPowZero() { - TestUtils.assertSame(Complex.NaN, - Complex.ZERO.pow(Complex.ONE)); + TestUtils.assertEquals(Complex.ZERO, + Complex.ZERO.pow(Complex.ONE), 10e-12); + TestUtils.assertEquals(Complex.ZERO, + Complex.ZERO.pow(new Complex(2, 0)), 10e-12); TestUtils.assertSame(Complex.NaN, Complex.ZERO.pow(Complex.ZERO)); TestUtils.assertSame(Complex.NaN, @@ -994,8 +996,10 @@ public class ComplexTest { @Test public void testScalarPowZero() { - TestUtils.assertSame(Complex.NaN, Complex.ZERO.pow(1.0)); + TestUtils.assertEquals(Complex.ZERO, Complex.ZERO.pow(1.0), 10e-12); + TestUtils.assertEquals(Complex.ZERO, Complex.ZERO.pow(2.0), 10e-12); TestUtils.assertSame(Complex.NaN, Complex.ZERO.pow(0.0)); + TestUtils.assertSame(Complex.NaN, Complex.ZERO.pow(-1.0)); TestUtils.assertEquals(Complex.ONE, Complex.ONE.pow(0.0), 10e-12); TestUtils.assertEquals(Complex.ONE, Complex.I.pow(0.0), 10e-12); TestUtils.assertEquals(Complex.ONE, new Complex(-1, 3).pow(0.0), 10e-12);
