On Sat, 26 Apr 2025 19:11:01 GMT, fabioromano1 <d...@openjdk.org> wrote:

>> This PR optimizes `BigInteger.pow(int)` method. The primary enhancement in 
>> `pow()` is not concerned most on execution time, but rather in memory 
>> optimization, because the PR implementation does the "shift of the exponent" 
>> squaring the result rather than the base, so the base is not squared like in 
>> the current implementation, and this permits to save about half of the 
>> memory.
>
> fabioromano1 has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Put power's computation in a stand-alone method

src/java.base/share/classes/java/math/BigInteger.java line 2642:

> 2640:         // Use slightly different algorithms for small and large 
> operands.
> 2641:         // See if the result will safely fit into a long. (Largest 
> 2^63-1)
> 2642:         if (base.mag.length == 1 && scaleFactor <= 62) {

It seems your new `unsignedIntPow` already covers `base.mag.length == 1` case - 
your `unsignedLongPow` and `unsignedIntPow` are otherwise identical. Can we 
just remove this long shortcut and `unsignedLongPow` and use the newly 
established `unsignedIntPow`? That can also remove lots of redundant code and 
significantly reduce maintenance cost. (Unless BigInteger.multiply(long) is 
much cheaper than BigInteger.multiply(BigInteger))

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/24690#discussion_r2061552026

Reply via email to