Tim Peters added the comment: If someone has a more recent version of MS's compiler, I'd be interested to know what this does:
inc = 2.0**-43 base = 1024.0 xs = ([base + i*inc for i in range(-4, 0)] + [base] + [base + 2*i*inc for i in (1, 2)]) print xs print ["%.16g" % x for x in xs] That creates 7 distinct doubles all of which map to "1024" when correctly rounded to 16 significant digits. And that's what the Cygwin Python 2.5.1 (which presumably uses David Gay's correct-rounding conversion routines from glibc) displays for the last line: ['1024', '1024', '1024', '1024', '1024', '1024', '1024'] The released Windows Python 2.5.1 displays this instead: ['1024', '1024', '1024', '1024', '1024', '1024', '1024.000000000001'] That's a pretty gross rounding error, since the exact value of the last element is 1024.00000000000045474735088646411895751953125 and so the 16'th digit should indeed not round up to 1. It's a "pretty gross" error because the rounded-off part isn't particularly close to a half unit in the last (16'th) place. __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue1580> __________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com