In a message of Fri, 03 Jul 2015 00:52:55 +1000, "Steven D'Aprano" writes: >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. > > > >-- >Steven
PyPy says: Python 2.7.9 (2.5.1+dfsg-1, Mar 27 2015, 19:45:43) [PyPy 2.5.1 with GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>> x = 1 - 1/2**53 >>>> assert x == 0.9999999999999999 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError >>>> for i in range(1, 1000000): .... if int(i*x) == i: .... print(i); break .... .... 1 >>>> So the loop terminates, but there is an Assertion Error. Did you want that? Laura -- https://mail.python.org/mailman/listinfo/python-list