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 fbf308b12fee9757eece61a57cf356ced1b7ca1a Author: aherbert <[email protected]> AuthorDate: Thu Dec 12 10:36:20 2019 +0000 Use getExponent(double) in place of Math.log(double) / Math.log(2) The calls to Math.log() are only required to the nearest integer value for use in scaling. --- .../src/main/java/org/apache/commons/numbers/complex/Complex.java | 8 +++++--- 1 file changed, 5 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 f3ac498..56529db 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 @@ -464,9 +464,11 @@ public final class Complex implements Serializable { double c = re2; double d = im2; int ilogbw = 0; - final double logbw = Math.log(Math.max(Math.abs(c), Math.abs(d))) / Math.log(2); - if (Double.isFinite(logbw)) { - ilogbw = (int)logbw; + // Get the exponent to scale the divisor. + // This is equivalent to (int) Math.log2(double). + final int exponent = Math.getExponent(Math.max(Math.abs(c), Math.abs(d))); + if (exponent <= Double.MAX_EXPONENT) { + ilogbw = exponent; c = Math.scalb(c, -ilogbw); d = Math.scalb(d, -ilogbw); }
