RFR: 8077587: BigInteger Roots [v52]

Raffaello Giulietti rgiulietti at openjdk.org
Tue Jul 29 13:51:39 UTC 2025


On Tue, 29 Jul 2025 13:26:41 GMT, fabioromano1 <duke at openjdk.org> wrote:

>> My point is that this should be done, not the exact form it takes. Mine or yours are both better than nothing.
>> 
>> Another point I wanted to make is that the `if` condition bl - (sh - ex) ≤ ME can be replaced with the simpler ex ≤ ME - P, whose right-hand side is a compile time constant.
>> 
>>> And this should follow by the fact that bl - (sh - ex) =  bl - (bl - P - ex) = P + ex, since ex ≥ 0.
>> 
>> To show that ⌊x / 2^sh'⌋ has at least P bits of precision, I think you need to make use of x ≥ 2^(bl-1).
>> 
>> Anyway, I hope I made my point clear: it is better to write proofs rather than relying on readers to reverse-engineer them from the code. Surely, there's no need to be pedantic in every single detail.
>
> @rgiulietti Are there other points that are still not clear?

Well, that was the easy case!
(BTW, the condition shExcess != 0 on L.2025 is always true, as shExcess > Double.MAX_EXPONENT - Double.PRECISION there.)

There should be similar reasoning for the `else` part on L.2020.

And, more importantly so, for the more obscure parts (for a 1st time reader, not for the author ;-) ) starting at L.2034. This is the code that took most of my time.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24898#discussion_r2239897015


More information about the core-libs-dev mailing list