On Wed, 30 Apr 2025 12:20:39 GMT, Raffaello Giulietti <rgiulie...@openjdk.org> wrote:
>> fabioromano1 has updated the pull request incrementally with one additional >> commit since the last revision: >> >> Simplified the formula for detecting overflows > > src/java.base/share/classes/java/math/BigInteger.java line 2737: > >> 2735: } >> 2736: >> 2737: return pow; > > Is there a reason this cannot simply be the traditional "repeated square" > method? > Why this complexity? > > Suggestion: > > if (x == 1L) > return 1L; > > if (x == 2L) > return 1L << n; > > /* > * The method assumption means that n <= 40 here. > * Thus, the loop body executes at most 5 times. > */ > long pow = 1; > for (; n > 1; x *= x, n >>>= 1) { > if ((n & 0b1) != 0) { > pow *= x; > } > } > return pow * x; @rgiulietti More than else, since `Math.pow(double, double)` has a lot of optimizations, I expect it to be faster than the simple "repeated square" method... ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24690#discussion_r2068730720