On Tue, 19 Nov 2024 18:44:27 GMT, Raffaello Giulietti <[email protected]>
wrote:
>> fabioromano1 has updated the pull request incrementally with one additional
>> commit since the last revision:
>>
>> Correct remainder checking
>
> src/java.base/share/classes/java/math/BigDecimal.java line 2253:
>
>> 2251:
>> 2252: case UP, CEILING -> {
>> 2253: BigInteger[] sqrtRem =
>> workingInt.sqrtAndRemainder();
>
> Can't this follow the same logic as for the halfway cases, with just `sqrt()`
> and a `!workingInt.equals(sqrt.multiply(sqrt))` test? This would increase
> consistency.
> Are there performance reasons to do it as in the current code?
Yes, indeed in this case the remainder is always needed, so invoking
`workingInt.sqrtAndRemainder()` is faster than checking
`!workingInt.equals(sqrt.multiply(sqrt))`, as it avoids the squaring of `sqrt`.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21301#discussion_r1848892890