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/28 11:34:47 UTC

[1/2] commons-numbers git commit: NUMBERS-13: atanh() passes all tests

Repository: commons-numbers
Updated Branches:
  refs/heads/complex-dev af5fc05bb -> 387f4e09b


NUMBERS-13: atanh() 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/a9437c90
Tree: http://git-wip-us.apache.org/repos/asf/commons-numbers/tree/a9437c90
Diff: http://git-wip-us.apache.org/repos/asf/commons-numbers/diff/a9437c90

Branch: refs/heads/complex-dev
Commit: a9437c90666ca8c3045f1d59de1b77e536addba6
Parents: af5fc05
Author: Eric Barnhill <er...@apache.org>
Authored: Fri Jul 28 13:24:12 2017 +0200
Committer: Eric Barnhill <er...@apache.org>
Committed: Fri Jul 28 13:24:12 2017 +0200

----------------------------------------------------------------------
 .../apache/commons/numbers/complex/Complex.java | 75 +++++++++++---------
 .../commons/numbers/complex/CStandardTest.java  |  4 +-
 2 files changed, 44 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/a9437c90/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 fc3ff93..5a77a9f 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,7 +641,7 @@ in the
      * @return the inverse cosine of this complex number.
      */
     public Complex acos() {
-        if (real == 0 && Double.isNaN(imaginary)) {
+        if (real == 0.0&& Double.isNaN(imaginary)) {
             return new Complex(Math.PI * 0.5, Double.NaN);
         } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary == Double.POSITIVE_INFINITY) {
             return new Complex(Math.PI * 0.5, Double.NEGATIVE_INFINITY);
@@ -704,13 +704,13 @@ in the
         if (neitherInfiniteNorZeroNorNaN(real) && imaginary == Double.POSITIVE_INFINITY) {
             return new Complex(Double.POSITIVE_INFINITY, Math.PI * 0.5);
         } else if (real == Double.POSITIVE_INFINITY && !Double.isInfinite(imaginary) && !Double.isNaN(imaginary)) {
-            return new Complex(Double.POSITIVE_INFINITY, 0);
+            return new Complex(Double.POSITIVE_INFINITY, 0.0);
         } else if (real == Double.POSITIVE_INFINITY && imaginary == Double.POSITIVE_INFINITY) {
             return new Complex(Double.POSITIVE_INFINITY, Math.PI * 0.25);
         } else if (real == Double.POSITIVE_INFINITY && Double.isNaN(imaginary)) {
             return new Complex(Double.POSITIVE_INFINITY,  Double.NaN);
-        } else if (Double.isNaN(real) && imaginary == 0) {
-            return new Complex(Double.NaN, 0);
+        } else if (Double.isNaN(real) && imaginary == 0.0) {
+            return new Complex(Double.NaN, 0.0);
         } else if (Double.isNaN(real) && imaginary == Double.POSITIVE_INFINITY) {
             return new Complex(Double.POSITIVE_INFINITY, Double.NaN);
         }
@@ -729,10 +729,10 @@ in the
      * @since 1.2
      */
     public Complex atanh(){
-        if (real == 0  && Double.isNaN(imaginary)) {
+        if (real == 0.0 && Double.isNaN(imaginary)) {
             return new Complex(0, Double.NaN);
-        } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary == 0) {
-            return new Complex(Double.POSITIVE_INFINITY, 0);
+        } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary == 0.0) {
+            return new Complex(Double.POSITIVE_INFINITY, 0.0);
         } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary == Double.POSITIVE_INFINITY) {
             return new Complex(0, Math.PI*0.5);
         } else if (real == Double.POSITIVE_INFINITY && neitherInfiniteNorZeroNorNaN(imaginary)) {
@@ -808,18 +808,18 @@ in the
      * @return the hyperbolic cosine of this complex number.
      */
     public Complex cosh() {
-        if (real == 0 && imaginary == Double.POSITIVE_INFINITY) {
-            return new Complex(Double.NaN, 0);
-        } else if (real == 0 && Double.isNaN(imaginary)) {
-            return new Complex(Double.NaN, 0);
-        } else if (real == Double.POSITIVE_INFINITY && imaginary == 0) {
-            return new Complex(Double.POSITIVE_INFINITY, 0);
+        if (real == 0.0&& imaginary == Double.POSITIVE_INFINITY) {
+            return new Complex(Double.NaN, 0.0);
+        } else if (real == 0.0&& Double.isNaN(imaginary)) {
+            return new Complex(Double.NaN, 0.0);
+        } else if (real == Double.POSITIVE_INFINITY && imaginary == 0.0) {
+            return new Complex(Double.POSITIVE_INFINITY, 0.0);
         } else if (real == Double.POSITIVE_INFINITY && imaginary == Double.POSITIVE_INFINITY) {
             return new Complex(Double.POSITIVE_INFINITY, Double.NaN); 
         } else if (real == Double.POSITIVE_INFINITY && Double.isNaN(imaginary)) {
             return new Complex(Double.POSITIVE_INFINITY, Double.NaN);
-        } else if (Double.isNaN(real) && imaginary == 0) {
-            return new Complex(Double.NaN, 0);
+        } else if (Double.isNaN(real) && imaginary == 0.0) {
+            return new Complex(Double.NaN, 0.0);
         }
 
         return new Complex(Math.cosh(real) * Math.cos(imaginary),
@@ -843,8 +843,8 @@ in the
      * @return <code><i>e</i><sup>this</sup></code>.
      */
     public Complex exp() {
-        if (real == Double.POSITIVE_INFINITY && imaginary == 0) {
-            return new Complex(Double.POSITIVE_INFINITY, 0);
+        if (real == Double.POSITIVE_INFINITY && imaginary == 0.0) {
+            return new Complex(Double.POSITIVE_INFINITY, 0.0);
         } else if (real == Double.NEGATIVE_INFINITY && imaginary == Double.POSITIVE_INFINITY) {
             return Complex.ZERO;
         } else if (real == Double.POSITIVE_INFINITY && imaginary == Double.POSITIVE_INFINITY) {
@@ -853,8 +853,8 @@ in the
             return Complex.ZERO;
         } else if (real == Double.POSITIVE_INFINITY && Double.isNaN(imaginary)) {
             return new Complex(Double.POSITIVE_INFINITY, Double.NaN);
-        } else if (Double.isNaN(real) && imaginary == 0) {
-            return new Complex(Double.NaN, 0);
+        } else if (Double.isNaN(real) && imaginary == 0.0) {
+            return new Complex(Double.NaN, 0.0);
         }
         double expReal = Math.exp(real);
         return new Complex(expReal *  Math.cos(imaginary),
@@ -918,8 +918,8 @@ in the
      */
     public Complex pow(Complex x) {
         checkNotNull(x);
-        if (real == 0 && imaginary == 0) {
-            if (x.real > 0 && x.imaginary == 0) {
+        if (real == 0.0&& imaginary == 0.0) {
+            if (x.real > 0 && x.imaginary == 0.0) {
                 // 0 raised to positive number is 0
                 return ZERO;
             } else {
@@ -938,7 +938,7 @@ in the
      * @see #pow(Complex)
      */
      public Complex pow(double x) {
-        if (real == 0 && imaginary == 0) {
+        if (real == 0.0&& imaginary == 0.0) {
             if (x > 0) {
                 // 0 raised to positive number is 0
                 return ZERO;
@@ -989,20 +989,20 @@ in the
      * @return the hyperbolic sine of {@code this}.
      */
     public Complex sinh() {
-        if (real == 0 && imaginary == 0) {
+        if (real == 0.0&& imaginary == 0.0) {
             return Complex.ZERO;
-        } else if (real == 0 && imaginary == Double.POSITIVE_INFINITY) {
+        } else if (real == 0.0&& imaginary == Double.POSITIVE_INFINITY) {
             return new Complex(0, Double.NaN);
-        } else if (real == 0 && Double.isNaN(imaginary)) {
+        } else if (real == 0.0&& Double.isNaN(imaginary)) {
             return new Complex(0, Double.NaN);
-        } else if (real == Double.POSITIVE_INFINITY && imaginary == 0) {
-            return new Complex(Double.POSITIVE_INFINITY, 0);
+        } else if (real == Double.POSITIVE_INFINITY && imaginary == 0.0) {
+            return new Complex(Double.POSITIVE_INFINITY, 0.0);
         } else if (real == Double.POSITIVE_INFINITY && imaginary == Double.POSITIVE_INFINITY) {
             return new Complex(Double.POSITIVE_INFINITY, Double.NaN);
         } else if (real == Double.POSITIVE_INFINITY && Double.isNaN(imaginary)) {
             return new Complex(Double.POSITIVE_INFINITY, Double.NaN);
-        } else if (Double.isNaN(real) && imaginary == 0) {
-            return new Complex(Double.NaN, 0);
+        } else if (Double.isNaN(real) && imaginary == 0.0) {
+            return new Complex(Double.NaN, 0.0);
         }
         return new Complex(Math.sinh(real) * Math.cos(imaginary),
             Math.cosh(real) * Math.sin(imaginary));
@@ -1028,6 +1028,14 @@ in the
     public Complex sqrt() {
         if (real == 0.0 && imaginary == 0.0) {
             return new Complex(0.0, 0.0);
+        } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary == Double.POSITIVE_INFINITY) {
+            return new Complex(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);
+        } else if (real == Double.NEGATIVE_INFINITY && neitherInfiniteNorZeroNorNaN(imaginary)) {
+            return new Complex(0.0, Double.NaN);
+        } else if (real == Double.NEGATIVE_INFINITY && Double.isNaN(imaginary)) {
+            return new Complex(Double.NaN, Double.POSITIVE_INFINITY);
+        } else if (real == Double.POSITIVE_INFINITY && Double.isNaN(imaginary)) {
+            return new Complex(Double.POSITIVE_INFINITY, Double.NaN);
         }
 
         double t = Math.sqrt((Math.abs(real) + abs()) / 2.0);
@@ -1102,11 +1110,12 @@ in the
      * @return the hyperbolic tangent of {@code this}.
      */
     public Complex tanh() {
-        if (real > 20.0) {
+        if (real == Double.POSITIVE_INFINITY && imaginary == Double.POSITIVE_INFINITY) {
             return new Complex(1.0, 0.0);
-        }
-        if (real < -20.0) {
-            return new Complex(-1.0, 0.0);
+        } else if (real == Double.POSITIVE_INFINITY && Double.isNaN(imaginary)) {
+            return new Complex(1.0, 0.0);
+        } else if (Double.isNaN(real) && imaginary == 0) {
+            return new Complex(Double.NaN, 0); 
         }
         double real2 = 2.0 * real;
         double imaginary2 = 2.0 * imaginary;

http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/a9437c90/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 1ca0106..6ec5460 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
@@ -96,14 +96,14 @@ public class CStandardTest {
 
     @Test
     public void testImplicitTrig() {
-        Complex z1 = new Complex(3.0);
+        Complex z1 = new Complex(1.0);
         Complex z2 = new Complex(0.0, 3.0); 
         assertComplex(z1.asin(), negI.multiply(z2.asinh()));
         assertComplex(z1.atan(), negI.multiply(z2.atanh()), Math.ulp(1), Math.ulp(1));
         assertComplex(z1.cos(), z2.cosh());
         assertComplex(z1.sin(), negI.multiply(z2.sinh()));
         // CURRENTLY FAILS BELOW TEST
-        // assertComplex(z1.tan(), negI.multiply(z1.tanh()));
+        assertComplex(z1.tan(), negI.multiply(z1.tanh()));
     }
 
     /**


Re: [1/2] commons-numbers git commit: NUMBERS-13: atanh() passes all tests

Posted by Gilles <gi...@harfang.homelinux.org>.
Hi Eric.

Changing
   0 -> 0.0
is not necessary, and since the latter is less esthetically pleasing,
why bother?
And, as usual, we should avoid mixing different types of changes in
the same commit.

Regards,
Gilles

On Fri, 28 Jul 2017 11:34:47 -0000, ericbarnhill@apache.org wrote:
> Repository: commons-numbers
> Updated Branches:
>   refs/heads/complex-dev af5fc05bb -> 387f4e09b
>
>
> NUMBERS-13: atanh() 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/a9437c90
> Tree: 
> http://git-wip-us.apache.org/repos/asf/commons-numbers/tree/a9437c90
> Diff: 
> http://git-wip-us.apache.org/repos/asf/commons-numbers/diff/a9437c90
>
> Branch: refs/heads/complex-dev
> Commit: a9437c90666ca8c3045f1d59de1b77e536addba6
> Parents: af5fc05
> Author: Eric Barnhill <er...@apache.org>
> Authored: Fri Jul 28 13:24:12 2017 +0200
> Committer: Eric Barnhill <er...@apache.org>
> Committed: Fri Jul 28 13:24:12 2017 +0200
>
> 
> ----------------------------------------------------------------------
>  .../apache/commons/numbers/complex/Complex.java | 75 
> +++++++++++---------
>  .../commons/numbers/complex/CStandardTest.java  |  4 +-
>  2 files changed, 44 insertions(+), 35 deletions(-)
> 
> ----------------------------------------------------------------------
>
>
> 
> http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/a9437c90/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 fc3ff93..5a77a9f 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,7 +641,7 @@ in the
>       * @return the inverse cosine of this complex number.
>       */
>      public Complex acos() {
> -        if (real == 0 && Double.isNaN(imaginary)) {
> +        if (real == 0.0&& Double.isNaN(imaginary)) {
>              return new Complex(Math.PI * 0.5, Double.NaN);
>          } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary
> == Double.POSITIVE_INFINITY) {
>              return new Complex(Math.PI * 0.5, 
> Double.NEGATIVE_INFINITY);
> @@ -704,13 +704,13 @@ in the
>          if (neitherInfiniteNorZeroNorNaN(real) && imaginary ==
> Double.POSITIVE_INFINITY) {
>              return new Complex(Double.POSITIVE_INFINITY, Math.PI * 
> 0.5);
>          } else if (real == Double.POSITIVE_INFINITY &&
> !Double.isInfinite(imaginary) && !Double.isNaN(imaginary)) {
> -            return new Complex(Double.POSITIVE_INFINITY, 0);
> +            return new Complex(Double.POSITIVE_INFINITY, 0.0);
>          } else if (real == Double.POSITIVE_INFINITY && imaginary ==
> Double.POSITIVE_INFINITY) {
>              return new Complex(Double.POSITIVE_INFINITY, Math.PI * 
> 0.25);
>          } else if (real == Double.POSITIVE_INFINITY &&
> Double.isNaN(imaginary)) {
>              return new Complex(Double.POSITIVE_INFINITY,  
> Double.NaN);
> -        } else if (Double.isNaN(real) && imaginary == 0) {
> -            return new Complex(Double.NaN, 0);
> +        } else if (Double.isNaN(real) && imaginary == 0.0) {
> +            return new Complex(Double.NaN, 0.0);
>          } else if (Double.isNaN(real) && imaginary ==
> Double.POSITIVE_INFINITY) {
>              return new Complex(Double.POSITIVE_INFINITY, 
> Double.NaN);
>          }
> @@ -729,10 +729,10 @@ in the
>       * @since 1.2
>       */
>      public Complex atanh(){
> -        if (real == 0  && Double.isNaN(imaginary)) {
> +        if (real == 0.0 && Double.isNaN(imaginary)) {
>              return new Complex(0, Double.NaN);
> -        } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary 
> == 0) {
> -            return new Complex(Double.POSITIVE_INFINITY, 0);
> +        } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary 
> == 0.0) {
> +            return new Complex(Double.POSITIVE_INFINITY, 0.0);
>          } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary
> == Double.POSITIVE_INFINITY) {
>              return new Complex(0, Math.PI*0.5);
>          } else if (real == Double.POSITIVE_INFINITY &&
> neitherInfiniteNorZeroNorNaN(imaginary)) {
> @@ -808,18 +808,18 @@ in the
>       * @return the hyperbolic cosine of this complex number.
>       */
>      public Complex cosh() {
> -        if (real == 0 && imaginary == Double.POSITIVE_INFINITY) {
> -            return new Complex(Double.NaN, 0);
> -        } else if (real == 0 && Double.isNaN(imaginary)) {
> -            return new Complex(Double.NaN, 0);
> -        } else if (real == Double.POSITIVE_INFINITY && imaginary == 
> 0) {
> -            return new Complex(Double.POSITIVE_INFINITY, 0);
> +        if (real == 0.0&& imaginary == Double.POSITIVE_INFINITY) {
> +            return new Complex(Double.NaN, 0.0);
> +        } else if (real == 0.0&& Double.isNaN(imaginary)) {
> +            return new Complex(Double.NaN, 0.0);
> +        } else if (real == Double.POSITIVE_INFINITY && imaginary == 
> 0.0) {
> +            return new Complex(Double.POSITIVE_INFINITY, 0.0);
>          } else if (real == Double.POSITIVE_INFINITY && imaginary ==
> Double.POSITIVE_INFINITY) {
>              return new Complex(Double.POSITIVE_INFINITY, 
> Double.NaN);
>          } else if (real == Double.POSITIVE_INFINITY &&
> Double.isNaN(imaginary)) {
>              return new Complex(Double.POSITIVE_INFINITY, 
> Double.NaN);
> -        } else if (Double.isNaN(real) && imaginary == 0) {
> -            return new Complex(Double.NaN, 0);
> +        } else if (Double.isNaN(real) && imaginary == 0.0) {
> +            return new Complex(Double.NaN, 0.0);
>          }
>
>          return new Complex(Math.cosh(real) * Math.cos(imaginary),
> @@ -843,8 +843,8 @@ in the
>       * @return <code><i>e</i><sup>this</sup></code>.
>       */
>      public Complex exp() {
> -        if (real == Double.POSITIVE_INFINITY && imaginary == 0) {
> -            return new Complex(Double.POSITIVE_INFINITY, 0);
> +        if (real == Double.POSITIVE_INFINITY && imaginary == 0.0) {
> +            return new Complex(Double.POSITIVE_INFINITY, 0.0);
>          } else if (real == Double.NEGATIVE_INFINITY && imaginary ==
> Double.POSITIVE_INFINITY) {
>              return Complex.ZERO;
>          } else if (real == Double.POSITIVE_INFINITY && imaginary ==
> Double.POSITIVE_INFINITY) {
> @@ -853,8 +853,8 @@ in the
>              return Complex.ZERO;
>          } else if (real == Double.POSITIVE_INFINITY &&
> Double.isNaN(imaginary)) {
>              return new Complex(Double.POSITIVE_INFINITY, 
> Double.NaN);
> -        } else if (Double.isNaN(real) && imaginary == 0) {
> -            return new Complex(Double.NaN, 0);
> +        } else if (Double.isNaN(real) && imaginary == 0.0) {
> +            return new Complex(Double.NaN, 0.0);
>          }
>          double expReal = Math.exp(real);
>          return new Complex(expReal *  Math.cos(imaginary),
> @@ -918,8 +918,8 @@ in the
>       */
>      public Complex pow(Complex x) {
>          checkNotNull(x);
> -        if (real == 0 && imaginary == 0) {
> -            if (x.real > 0 && x.imaginary == 0) {
> +        if (real == 0.0&& imaginary == 0.0) {
> +            if (x.real > 0 && x.imaginary == 0.0) {
>                  // 0 raised to positive number is 0
>                  return ZERO;
>              } else {
> @@ -938,7 +938,7 @@ in the
>       * @see #pow(Complex)
>       */
>       public Complex pow(double x) {
> -        if (real == 0 && imaginary == 0) {
> +        if (real == 0.0&& imaginary == 0.0) {
>              if (x > 0) {
>                  // 0 raised to positive number is 0
>                  return ZERO;
> @@ -989,20 +989,20 @@ in the
>       * @return the hyperbolic sine of {@code this}.
>       */
>      public Complex sinh() {
> -        if (real == 0 && imaginary == 0) {
> +        if (real == 0.0&& imaginary == 0.0) {
>              return Complex.ZERO;
> -        } else if (real == 0 && imaginary == 
> Double.POSITIVE_INFINITY) {
> +        } else if (real == 0.0&& imaginary == 
> Double.POSITIVE_INFINITY) {
>              return new Complex(0, Double.NaN);
> -        } else if (real == 0 && Double.isNaN(imaginary)) {
> +        } else if (real == 0.0&& Double.isNaN(imaginary)) {
>              return new Complex(0, Double.NaN);
> -        } else if (real == Double.POSITIVE_INFINITY && imaginary == 
> 0) {
> -            return new Complex(Double.POSITIVE_INFINITY, 0);
> +        } else if (real == Double.POSITIVE_INFINITY && imaginary == 
> 0.0) {
> +            return new Complex(Double.POSITIVE_INFINITY, 0.0);
>          } else if (real == Double.POSITIVE_INFINITY && imaginary ==
> Double.POSITIVE_INFINITY) {
>              return new Complex(Double.POSITIVE_INFINITY, 
> Double.NaN);
>          } else if (real == Double.POSITIVE_INFINITY &&
> Double.isNaN(imaginary)) {
>              return new Complex(Double.POSITIVE_INFINITY, 
> Double.NaN);
> -        } else if (Double.isNaN(real) && imaginary == 0) {
> -            return new Complex(Double.NaN, 0);
> +        } else if (Double.isNaN(real) && imaginary == 0.0) {
> +            return new Complex(Double.NaN, 0.0);
>          }
>          return new Complex(Math.sinh(real) * Math.cos(imaginary),
>              Math.cosh(real) * Math.sin(imaginary));
> @@ -1028,6 +1028,14 @@ in the
>      public Complex sqrt() {
>          if (real == 0.0 && imaginary == 0.0) {
>              return new Complex(0.0, 0.0);
> +        } else if (neitherInfiniteNorZeroNorNaN(real) && imaginary
> == Double.POSITIVE_INFINITY) {
> +            return new Complex(Double.POSITIVE_INFINITY,
> Double.POSITIVE_INFINITY);
> +        } else if (real == Double.NEGATIVE_INFINITY &&
> neitherInfiniteNorZeroNorNaN(imaginary)) {
> +            return new Complex(0.0, Double.NaN);
> +        } else if (real == Double.NEGATIVE_INFINITY &&
> Double.isNaN(imaginary)) {
> +            return new Complex(Double.NaN, 
> Double.POSITIVE_INFINITY);
> +        } else if (real == Double.POSITIVE_INFINITY &&
> Double.isNaN(imaginary)) {
> +            return new Complex(Double.POSITIVE_INFINITY, 
> Double.NaN);
>          }
>
>          double t = Math.sqrt((Math.abs(real) + abs()) / 2.0);
> @@ -1102,11 +1110,12 @@ in the
>       * @return the hyperbolic tangent of {@code this}.
>       */
>      public Complex tanh() {
> -        if (real > 20.0) {
> +        if (real == Double.POSITIVE_INFINITY && imaginary ==
> Double.POSITIVE_INFINITY) {
>              return new Complex(1.0, 0.0);
> -        }
> -        if (real < -20.0) {
> -            return new Complex(-1.0, 0.0);
> +        } else if (real == Double.POSITIVE_INFINITY &&
> Double.isNaN(imaginary)) {
> +            return new Complex(1.0, 0.0);
> +        } else if (Double.isNaN(real) && imaginary == 0) {
> +            return new Complex(Double.NaN, 0);
>          }
>          double real2 = 2.0 * real;
>          double imaginary2 = 2.0 * imaginary;
>
> 
> http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/a9437c90/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 1ca0106..6ec5460 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
> @@ -96,14 +96,14 @@ public class CStandardTest {
>
>      @Test
>      public void testImplicitTrig() {
> -        Complex z1 = new Complex(3.0);
> +        Complex z1 = new Complex(1.0);
>          Complex z2 = new Complex(0.0, 3.0);
>          assertComplex(z1.asin(), negI.multiply(z2.asinh()));
>          assertComplex(z1.atan(), negI.multiply(z2.atanh()),
> Math.ulp(1), Math.ulp(1));
>          assertComplex(z1.cos(), z2.cosh());
>          assertComplex(z1.sin(), negI.multiply(z2.sinh()));
>          // CURRENTLY FAILS BELOW TEST
> -        // assertComplex(z1.tan(), negI.multiply(z1.tanh()));
> +        assertComplex(z1.tan(), negI.multiply(z1.tanh()));
>      }
>
>      /**


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


[Numbers] C99 (Was: [...] git commit: [NUMBERS-13] is closed.)

Posted by Gilles <gi...@harfang.homelinux.org>.
Hi.

On Fri, 28 Jul 2017 11:34:48 -0000, ericbarnhill@apache.org wrote:
> NUMBERS-13: Complex() passes all tests and meets all the C99
> standards. This issue is closed.

Thanks for this work! :-)

Do you think of adding some info (in Javadoc, or in a "User guide")
about the new functionality (references and prominent features)?

Best,
Gilles

>
> [...]


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


[2/2] commons-numbers git commit: NUMBERS-13: Complex() passes all tests and meets all the C99 standards. This issue is closed.

Posted by er...@apache.org.
NUMBERS-13: Complex() passes all tests and meets all the C99 standards. This issue is closed.


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

Branch: refs/heads/complex-dev
Commit: 387f4e09b58d6d374a557a02093df887a8e8ebf8
Parents: a9437c9
Author: Eric Barnhill <er...@apache.org>
Authored: Fri Jul 28 13:36:53 2017 +0200
Committer: Eric Barnhill <er...@apache.org>
Committed: Fri Jul 28 13:36:53 2017 +0200

----------------------------------------------------------------------
 .../java/org/apache/commons/numbers/complex/CStandardTest.java  | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-numbers/blob/387f4e09/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 6ec5460..ed0bf4f 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
@@ -96,14 +96,13 @@ public class CStandardTest {
 
     @Test
     public void testImplicitTrig() {
-        Complex z1 = new Complex(1.0);
+        Complex z1 = new Complex(3.0);
         Complex z2 = new Complex(0.0, 3.0); 
         assertComplex(z1.asin(), negI.multiply(z2.asinh()));
         assertComplex(z1.atan(), negI.multiply(z2.atanh()), Math.ulp(1), Math.ulp(1));
         assertComplex(z1.cos(), z2.cosh());
         assertComplex(z1.sin(), negI.multiply(z2.sinh()));
-        // CURRENTLY FAILS BELOW TEST
-        assertComplex(z1.tan(), negI.multiply(z1.tanh()));
+        assertComplex(z1.tan(), negI.multiply(z2.tanh()));
     }
 
     /**