Steven D'Aprano wrote: > Yes, but my point (badly put, I admit) was that people find fractions far > easier to work with than they find floating point numbers.
I'm not so sure. I got caught by the comic XKCD's infinite-resistor-grid thing, and simplified it to a ladder network -- call it L -- made up of 2 1-ohm resistors in series with a 1-ohm resistor paralleled by L. Simulating this -- assuming an arbitrary endpoint with resistance 3 -- well, it takes a little thought to decide that 11/15 < 3/4, and a lot more to decide the same thing for 153/209 and thus decide whether the series is coming or going. Then when you work out the right answer from L = 2 + (L / (L+1)) that answer depends on sqrt(12), which Rationals handle just as badly as floats, and at far greater expense. I wrote a Rational class back when I was learning to do these things in Python, and it was actually pretty easy: a dash of GCD, a pinch of partial fractions, and a lot of following the Python Reference Manual. It eventually worked as advertised, but I haven't used it since. It could stand to be updated to use the __new__ method and produce genuinely immutable instances, if I could find the source. Mel. And with any > rational data type worth the name, you simply should never get anything > as unintuitive as this: > >>>> from __future__ import division >>>> 4/10 + 2/10 == 6/10 > False > > > -- http://mail.python.org/mailman/listinfo/python-list