Bug in floating point multiplication

Steven D'Aprano steve at pearwood.info
Thu Jul 2 16:52:55 CEST 2015

Despite the title, this is not one of the usual "Why can't Python do
maths?" "bug" reports.

Can anyone reproduce this behaviour? If so, please reply with the version of
Python and your operating system. Printing sys.version will probably do.

x = 1 - 1/2**53
assert x == 0.9999999999999999
for i in range(1, 1000000):
    if int(i*x) == i:
        print(i); break

Using Jython and IronPython, the loop runs to completion. That is the
correct behaviour, or so I am lead to believe. Using Python 2.6, 2.7 and
3.3 on Centos and Debian, it prints 2049 and breaks. That should not
happen. If you can reproduce that (for any value of i, not necessarily
2049), please reply.

See also http://bugs.python.org/issue24546 for more details.


More information about the Python-list mailing list