[Python-Dev] Adding a Rational Type to Python

Tim Peters tim.one@home.com
Mon, 12 Mar 2001 03:52:49 -0500


[Michael Hudson]
> ...
> Having ddd.ddd be a rational bothers me.  *No* langauge does that at
> present, do they?

ABC (Python's closest predecessor) did.  6.02e23 and 1.073242e-301 were also
exact rationals.  *All* numeric literals were.  This explains why they aren't
in Python, but doesn't explain exactly why:  i.e., it didn't work well in
ABC, but it's unclear whether that's because rationals suck, or because you
got rationals even when 10,000 years of computer history <wink> told you that
"." would get you something else.

> Also, writing rational numbers as decimal floats strikes me as a
> bit loopy.  Is
>
>   0.33333333
>
> 1/3 or 3333333/10000000?

Neither, it's 33333333/100000000 (which is what I expect you intended for
your 2nd choice).  Else

    0.33333333 == 33333333/100000000

would be false, and

    0.33333333 * 3 == 1

would be true, and those are absurd if both sides are taken as rational
notations.  OTOH, it's possible to do rational<->string conversion with an
extended notation for "repeating decimals", e.g.

   str(1/3) == "0.(3)"
   eval("0.(3)") == 1/3

would be possible (indeed, I've implemented it in my own rational classes,
but not by default since identifying "the repeating part" in rat->string can
take space proportional to the magnitude of the denominator).

but-"."-is-mnemonic-for-the-"point"-in-"floating-point"-ly y'rs  - tim