This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-numbers.git

commit 69499d3ab2b66185c5f0bbb8a850d2c4fc540d85
Author: aherbert <aherb...@apache.org>
AuthorDate: Mon Dec 9 11:54:25 2019 +0000

    sqrt() handling of zero extends to all real numbers (imaginary == 0)
---
 .../main/java/org/apache/commons/numbers/complex/Complex.java  | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

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 4a4ee76..b4f1e8b 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
@@ -1714,9 +1714,13 @@ public final class Complex implements Serializable  {
         }
         if (Double.isFinite(real)) {
             if (Double.isFinite(imaginary)) {
-                // Handle zero
-                if (real == 0 && imaginary == 0) {
-                    return new Complex(0, imaginary);
+                // Edge case for real numbers
+                if (imaginary == 0) {
+                    final double sqrtAbs = Math.sqrt(Math.abs(real));
+                    if (real < 0) {
+                        return new Complex(0, Math.copySign(sqrtAbs, 
imaginary));
+                    }
+                    return new Complex(sqrtAbs, Math.copySign(0, imaginary));
                 }
                 final double abs = getAbsolute(real, imaginary);
                 final double av = (Math.abs(real) + abs) / 2;

Reply via email to