"wormwood_3" <[EMAIL PROTECTED]> wrote >>>> 1.1 > 1.1000000000000001
> "1.1" is a float type, and apparently it cannot be represented by > binary floating point numbers accurately. > I must admit that I do not understand why this is the case. This isn't just a problem in binary. Consider using normal decimal the cases of 1/7 or 1/3. There cannot be represented by any fixed number of decimal digits. 1/3 is 0.3333333.... to infinity and 1/7 is 0.142857142857..... repeating. In binary the denominator of the fraction must be a power of 2 (2,4,8,16 etc) for it to be accurately represented, otherwise you will get an approximation. Thus 1/10 could be approximated by 102/1024 = 0.09961 with a fairly small error (4/1024 = 0.00039). We can reduce the error still further by using bigger numbers, thus 6554/65536 = 0.100006 The best we can do in Python is use 2**64 as the denominator and the best approximation of 2**64/10 as the numerator, which gives the result above: >>> n= (2**64)/10 >>> n 1844674407370955161L >>> float(n)/(2**64) 0.10000000000000001 But we can never eliminate the error entirely because no power of two is also a power of 10. HTH, -- Alan Gauld Author of the Learn to Program web site http://www.freenetpages.co.uk/hp/alan.gauld _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor