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