On Thu, Mar 20, 2025 at 03:30:30PM -0500, Robert Dubner wrote:
> Let me find one inky-dink example.  Talk amongst yourselves...here we go.
> 
>         identification          division.
>         program-id.             prog.
>         data                    division.
>         working-storage         section.
>         77 var8 PIC 999V9(8) COMP-5 .
>         77 var555 PIC 999V99999999 COMP-5 VALUE 555.55555555.
>         procedure               division.
>         move 555.55555555 to var8
>         add 0.00000001 TO var555 giving var8 rounded
>         if var8 not equal to 555.55555556 display var8 " should be
> 555.55555556".
>         end program             prog.
> 
> With your patches, the output is
>       
>       555.55555555 should be 555.55555556

Thanks.
Now, the code certainly could try to do the rounding of the last digits
based on the remaining digits in the string that are being discarded,
if followed by 0-4, don't change anything, if followed by 6-9, increase
last digit, if followed by 5 and any non-zero digit, increase too, if followed
by 5 and all zeros, round to even.
But I'm afraid it can have double rounding, when round_to_decimal rounds
for the precision 33 printing something e.g. with 49999999999999999999 at
the end to 500000000000 and this second rounding again.
So I really think we should go to mpfr, I can implement it tomorrow unless
Richi wants to do that.

        Jakub

Reply via email to