[PATCH] 4511638: Double.toString(double) sometimes produces incorrect results
Andrew Haley
aph at redhat.com
Fri Mar 8 13:35:25 UTC 2019
Hi,
On 3/7/19 7:16 PM, Raffaello Giulietti wrote:
> a couple of weeks ago I tried to refactor the code assuming the
> existence of unsignedMultiplyHigh() (either as some future intrinsic or
> as a Java method) and a wider representations of g with either 127 or
> 128 bits:
> g = g1 2^64 + g0
>
> with either
> 2^63 <= g1 < 2^64 (128 bits)
>
> or
> 2^62 <= g1 < 2^63 (127 bits)
>
> Unfortunately, the resulting code of rop() isn't any simpler. That's
> because then an intermediate sum can overflow the 64 bits of a long. As
> a consequence, there's need for more elaborate logic to determine
> the carry and other slightly more complicated computations to assemble
> the final result. All in all, the resulting code has more operations and
> looks longer.
Ah, I see. I agree, we still don't quite have the full set of operations
that we need in Java, in particular a nice way of doing an add with carry.
Thank you for the explanation.
> In the meantime I got rid of the last division. There's no division at
> all in the whole algorithm.
Excellent. This is looking very good indeed.
--
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671
More information about the core-libs-dev
mailing list