Weird result returned from adding floats depending on order I add them
Laurent Pointal
laurent.pointal at limsi.fr
Tue Feb 20 07:56:03 EST 2007
More information about the Python-list mailing list
Tue Feb 20 07:56:03 EST 2007
- Previous message (by thread): Forking SocketServer daemon -- updating state
- Next message (by thread): Weird result returned from adding floats depending on order I add them
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
joanne matthews (RRes-Roth) a écrit : > I'm getting different results when I add up a list of floats depending > on the order that I list the floats. For example, the following returns > False: > def check(): > totalProp=0 > inputs=[0.2,0.2,0.2,0.1,0.2,0,0.1] > for each in inputs: > > totalProp+=each > print "totalProp=",totalProp > if totalProp != 1: > print "Your proportions must add up to 1" > > return False > return True > > However, if I swap, the 4th and 5th list items like this: > > totalProp=0 > inputs=[0.2,0.2,0.2,0.2,0.1,0,0.1] > for each in inputs: > > totalProp+=each > print "totalProp=",totalProp > if totalProp != 1: > print "Your proportions must add up to 1" > > return False > return True > > I get True returned. Can anyone tell me whats going Its related to the internal representation of real numbers using a finite number of binary digits - intermediate additions may (here the order is have an impact) produce results which have no representation, and lead to dismiss of an epsilon value. http://en.wikipedia.org/wiki/Floating_point > on and how I can > avoid the problem. Thanks Use an ad-hoc library with numerical types using a different representation (other posters may give examples of libraries they use).
- Previous message (by thread): Forking SocketServer daemon -- updating state
- Next message (by thread): Weird result returned from adding floats depending on order I add them
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list