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 2018/01/26 14:00:06 UTC

[15/37] commons-numbers git commit: NUMBERS-13: Acos passes all tests

NUMBERS-13: Acos passes all tests


Project: http://git-wip-us.apache.org/repos/asf/commons-numbers/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-numbers/commit/a6c54559
Tree: http://git-wip-us.apache.org/repos/asf/commons-numbers/tree/a6c54559
Diff: http://git-wip-us.apache.org/repos/asf/commons-numbers/diff/a6c54559

Branch: refs/heads/master
Commit: a6c54559c8609614bf55740885d176ddd60b11f7
Parents: f1a8f90
Author: Eric Barnhill <er...@apache.org>
Authored: Mon Jul 10 11:54:43 2017 +0200
Committer: Eric Barnhill <er...@apache.org>
Committed: Mon Jul 10 11:54:43 2017 +0200

----------------------------------------------------------------------
 .../apache/commons/numbers/complex/Complex.java | 24 ++++++++++++++++----
 .../commons/numbers/complex/CStandardTest.java  |  3 ++-
 2 files changed, 22 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/a6c54559/commons-numbers-complex/src/main/java/org/apache/commons/numbers/complex/Complex.java
----------------------------------------------------------------------
diff --git a/commons-numbers-complex/src/main/java/org/apache/commons/numbers/complex/Complex.java b/commons-numbers-complex/src/main/java/org/apache/commons/numbers/complex/Complex.java
index adc03b1..8fc1077 100644
--- a/commons-numbers-complex/src/main/java/org/apache/commons/numbers/complex/Complex.java
+++ b/commons-numbers-complex/src/main/java/org/apache/commons/numbers/complex/Complex.java
@@ -641,23 +641,39 @@ in the
      * @return the inverse cosine of this complex number.
      */
     public Complex acos() {
+        if (real == 0 && Double.isNaN(imaginary)) {
+            return new Complex(Math.PI * 0.5, Double.NaN);
+        } else if (!Double.isNaN(real) && !Double.isInfinite(real) && imaginary == Double.POSITIVE_INFINITY) {
+            return new Complex(Math.PI * 0.5, Double.NEGATIVE_INFINITY);
+        } else if (real == Double.NEGATIVE_INFINITY && imaginary == 1) {
+            return new Complex(Math.PI, Double.NEGATIVE_INFINITY);
+        } else if (real == Double.POSITIVE_INFINITY && imaginary == 1) {
+            return new Complex(0, Double.NEGATIVE_INFINITY);
+        } else if (real == Double.NEGATIVE_INFINITY && imaginary == Double.POSITIVE_INFINITY) {
+            return new Complex(Math.PI * 0.75, Double.NEGATIVE_INFINITY);
+        } else if (real == Double.POSITIVE_INFINITY && imaginary == Double.POSITIVE_INFINITY) {
+            return new Complex(Math.PI * 0.25, Double.NEGATIVE_INFINITY); 
+        } else if (real == Double.POSITIVE_INFINITY && Double.isNaN(imaginary)) {
+            return new Complex(Double.NaN , Double.POSITIVE_INFINITY);
+        } else if (real == Double.NEGATIVE_INFINITY && Double.isNaN(imaginary)) {
+            return new Complex(Double.NaN, Double.NEGATIVE_INFINITY);
+        } else if (Double.isNaN(real) && imaginary == Double.POSITIVE_INFINITY) {
+            return new Complex(Double.NaN, Double.NEGATIVE_INFINITY);
+        } 
         return this.add(this.sqrt1z().multiply(I)).log().multiply(I.negate());
     }
-
     /**
      * Compute the
      * <a href="http://mathworld.wolfram.com/InverseSine.html" TARGET="_top">
      * inverse sine</a> of this complex number.
-     * Implements the formula:
      * <p>
      *  {@code asin(z) = -i (log(sqrt(1 - z<sup>2</sup>) + iz))}
      * </p><p>
-     * @return the inverse sine of this complex number.
+     * @return the inverse sine of this complex number
      */
     public Complex asin() {
         return sqrt1z().add(this.multiply(I)).log().multiply(I.negate());
     }
-
     /**
      * Compute the
      * <a href="http://mathworld.wolfram.com/InverseTangent.html" TARGET="_top">

http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/a6c54559/commons-numbers-complex/src/test/java/org/apache/commons/numbers/complex/CStandardTest.java
----------------------------------------------------------------------
diff --git a/commons-numbers-complex/src/test/java/org/apache/commons/numbers/complex/CStandardTest.java b/commons-numbers-complex/src/test/java/org/apache/commons/numbers/complex/CStandardTest.java
index a528170..9c178f2 100644
--- a/commons-numbers-complex/src/test/java/org/apache/commons/numbers/complex/CStandardTest.java
+++ b/commons-numbers-complex/src/test/java/org/apache/commons/numbers/complex/CStandardTest.java
@@ -38,6 +38,7 @@ public class CStandardTest {
     private Complex oneNegInf = new Complex(1, negInf);
     private Complex oneNaN = new Complex(1, nan);
     private Complex zeroInf = new Complex(0, inf);
+    private Complex zeroNegInf = new Complex(0,negInf);
     private Complex zeroNaN = new Complex(0, nan);
     private Complex zeroPiTwo = new Complex(0.0, piOverTwo);
     private Complex negZeroZero = new Complex(-0.0, 0);
@@ -116,7 +117,7 @@ public class CStandardTest {
         assertComplex(oneInf.acos(), piTwoNegInf);
         assertComplex(oneNaN.acos(), Complex.NaN);
         assertComplex(negInfOne.acos(), piNegInf);
-        assertComplex(infOne.acos(), zeroInf);
+        assertComplex(infOne.acos(), zeroNegInf);
         assertComplex(negInfPosInf.acos(), threePiFourNegInf);
         assertComplex(infInf.acos(), piFourNegInf);
         assertComplex(infNaN.acos(), nanInf);