RFR: 8341470: BigDecimal.stripTrailingZeros() optimization [v44]
Raffaello Giulietti
rgiulietti at openjdk.org
Mon Oct 14 15:11:21 UTC 2024
On Sun, 13 Oct 2024 22:45:25 GMT, fabioromano1 <duke at openjdk.org> wrote:
>> An optimized algorithm for `BigDecimal.stripTrailingZeros()` that uses repeated squares trick.
>
> fabioromano1 has updated the pull request incrementally with one additional commit since the last revision:
>
> Added mathematical comments for maxPowsOf5
Will approve in a couple of days if by then there are no other substantial changes.
src/java.base/share/classes/java/math/BigDecimal.java line 5280:
> 5278: BigInteger[] qr; // quotient-remainder pair
> 5279: // Remove 5^(2^i) from the factors of intVal, until 5^remainingZeros < 5^(2^i)
> 5280: // (i.e., there are too few powers of five left to remove).
It's a bit unclear what's meant here with "_too few_ powers of five left to remove".
Can we have something more explicit?
src/java.base/share/classes/java/math/BigDecimal.java line 5297:
> 5295: // bitLength(remainingZeros) == min{n >= 0 : 5^(2^n) > 5^remainingZeros}
> 5296: // so, while the loop condition is true,
> 5297: // the invariant i == max{n : 5^(2^n) <= 5^remainingZeros}
Suggestion:
// the invariant i == max{n : 5^(2^n) <= 5^remainingZeros},
// which is equivalent to i = bitLengthForLong(remainingZeros) - 1,
-------------
PR Review: https://git.openjdk.org/jdk/pull/21323#pullrequestreview-2366952196
PR Review Comment: https://git.openjdk.org/jdk/pull/21323#discussion_r1799690935
PR Review Comment: https://git.openjdk.org/jdk/pull/21323#discussion_r1799691009
More information about the core-libs-dev
mailing list