[Python-Dev] Feedback on new floating point info in tutorial
Mon, 11 Jun 2001 22:17:24 -0400
[Skip Montanaro, on the in-progess 2.2 Tutorial appendix]
> I took a quick look at that appendix. One thing that confused me
> a bit was that if 0.1 is approximated by something ever-so-slightly
> larger than 0.1, how is it that if you add ten of them together you
> wind up with a result that is ever-so-slightly less than 1.0?
Good for you, Skip! In all the years I've been explaining this stuff, I
only recall one other picking up on that immediately. I'm not writing a
book here, though <wink>, and any intro numeric programming text emphasizes
that n*x is a better bet than adding x together n times.
>>> .1 * 10
Greg Ewing put you on the right track, if you want to figure it out yourself
(as Deep Throat said, "follow the bits, Skip -- follow the bits").
> I didn't expect it to be exactly 1.0. Other floating point naifs
> may be confused in the same way:
> >>> "%.55f" % 0.5
> >>> "%.55f" % 0.1
> >>> "%.55f" % (0.5+0.1)
Note that this output is platform-dependent. For example, the last on
>>> "%.55f" % (0.5+0.1)
> IEEE-754-is-full-of-traps-for-the-unwary-ly y'rs,
All computer arithmetic is; and among binary fp systems, 754 has got to be
the best-behaved there is. Know how many irksome bugs I've fixed in Python
mucking with different sizes of integers across platforms, and what C does
and doesn't guarantee about them? About 20x more than fp bugs. Of course
there's 10000x as much integer code in Python too <wink>.
y'rs - tim