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);

Reply via email to