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;