HELP: restore my faith in Python

Fredrik Lundh effbot at telia.com
Fri Mar 3 20:54:28 CET 2000


Steven Holton wrote:
> I'm trying to learn Python, and wrote this script last night.  I was not
> expecting to see this behavior, and my faith is severely shaken:
>
> nose-46> python
> Python 1.5.2 (#1, Sep 17 1999, 20:15:36)  [GCC egcs-2.91.66
> 19990314/Linux (egcs- on linux-i386
> Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
> >>> limit = 5
> >>> for target in range(10):
> ...    n=((target/(limit+0.0))-(target/limit))*limit
> ...    print target, n, int(n)
> ...
> 0 0.0 0
> 1 1.0 1
> 2 2.0 2
> 3 3.0 3
> 4 4.0 4
> 5 0.0 0
> 6 1.0 0     <=== huh?
> 7 2.0 1     <=== et tu Brutus?
> 8 3.0 3
> 9 4.0 4

welcome to the wonderful world of floating point
arithmetics:

>>> limit = 5
>>> for target in range(10):
...    n=((target/(limit+0.0))-(target/limit))*limit
...    print target, "%.30g" % n, int(n)
...

0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 0 0
6 0.99999999999999978 0
7 1.9999999999999996 1
8 3.0000000000000004 3
9 4 4

I'll leave it to our resident IEEE guru, the timbot,
to explain exactly why this is happening...

</F>





More information about the Python-list mailing list