On Oct 25, 5:44 pm, gershar <gerrys...@gmail.com> wrote: > I had some problems with some Python projects that gave variable > results that I could not track down. Eventually and reluctantly I > converted them to Java. Later, when I had more time I tried to analyze > what the Python code was doing and found something strange. The > following snippet illustrates the problem. > > >>> i = -50.0 > >>> for x in xrange(5): > > i += 0.1 > z = i * 10.0 > print > print z > print int(z) > > -499.0 > -499 > > -498.0 > -498 > > -497.0 > -496 > > -496.0 > -495 > > -495.0 > -494 > > The first two iterations look OK but after that the int(z) function > returns the wrong value. It looks like the value was rounded down. If > a just do this:>>> int(-497.0) > > -497 > I get the value I expect. > So what is the problem? > > It looks like a rounding problem but on the surface there is nothing > to round. I am aware that there are rounding limitations with floating > point arithmetic but the value passed to int() is always correct. What > would cause it to be off by 1 full digit in only some cases? Perhaps > something behind the scenes in the bowels of the interpreter ?. > > I could not get the thing to fail without being inside the for loop; > does that have something to do with it? > > To fix the problem I could use round() or math.floor(). Like this. > > >>> i = -50.0 > >>> for x in xrange(5): > > i += 0.1 > z = i * 10.0 > print > print z > print(round(z)) > > -499.0 > -499.0 > > -498.0 > -498.0 > > -497.0 > -497.0 > > -496.0 > -496.0 > > -495.0 > -495.0 > > Why should I have to do this? > > Is there a general rule of thumb to know when this could be a problem? > > Should any float-to-int conversion be suspect? > > The above code was run in Python 2.5.4 on WinXP and Python 2.6.2 on > Linux(Fedora12) > Can anyone verify if this would be the same on 3.x?
Good responses from this group! Thanks for the insight Regards -- http://mail.python.org/mailman/listinfo/python-list