You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2019/12/09 11:58:55 UTC
[commons-numbers] 01/02: sqrt() handling of zero extends to all
real numbers (imaginary == 0)
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 <ah...@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;