On Mon, 14 Jul 2025 15:40:18 GMT, fabioromano1 <d...@openjdk.org> wrote:

>> src/java.base/share/classes/java/math/MutableBigInteger.java line 1964:
>> 
>>> 1962:             final double rad = Math.nextUp(x >= 0 ? x : x + 0x1p64);
>>> 1963:             final double approx = n == 3 ? Math.cbrt(rad) : 
>>> Math.pow(rad, Math.nextUp(1.0 / n));
>>> 1964:             long rLong = (long) Math.ceil(Math.nextUp(approx));
>> 
>> Does `rLong` need to be an overestimate of the true value, or does the 
>> algorithm also works for underestimates?
>> I'm asking because I'm not sure that `Math.pow()` has strong guarantees 
>> about its error bounds, whatever the documentation states.
>
> @rgiulietti The convergence of the recurrence is guaranteed if the initial 
> estimate is larger than or equal to the exact value, AFAIK no guarantee is 
> given when the estimate is smaller than the exact value.

This is my hunch as well.
So while the use of `nextUp()` and `ceil()` certainly help to achieve an 
overestimate, I'm less sure that this is sufficient when using `pow()`. If the 
latter has some error bigger than a few ulps, then we are in trouble.

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

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

Reply via email to