From d58fb1e290cb8a28a04900e132ae09002ae62937 Mon Sep 17 00:00:00 2001 From: Daisuke Yamazaki Date: Mon, 30 Mar 2026 12:58:07 +0000 Subject: [PATCH] 8374202: Simplify significand normalization in BigDecimal(double, MathContext) constructor Reviewed-by: rgiulietti --- src/java.base/share/classes/java/math/BigDecimal.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/java.base/share/classes/java/math/BigDecimal.java b/src/java.base/share/classes/java/math/BigDecimal.java index 14d81d30c3d..6e651b4fde2 100644 --- a/src/java.base/share/classes/java/math/BigDecimal.java +++ b/src/java.base/share/classes/java/math/BigDecimal.java @@ -1026,12 +1026,11 @@ public class BigDecimal extends Number implements Comparable { return; } // Normalize - while ((significand & 1) == 0) { // i.e., significand is even - significand >>= 1; - exponent++; - } - int scl = 0; + int nTrailingZeros = Long.numberOfTrailingZeros(significand); + significand >>= nTrailingZeros; + exponent += nTrailingZeros; // Calculate intVal and scale + int scl = 0; BigInteger rb; long compactVal = sign * significand; if (exponent == 0) {