On Sat, 15 Dec 2007 15:44:26 -0800, Arnaud Delobelle wrote: > Rationals are not that simple. > > * Unless you are working under very controlled conditions, rationals > very quickly grow enormous numerators and denominators, hence require > arbitrary precision integers (which, I concede, are part of Python).
Come now. Rationals aren't living things that grow if you sit them in the corner and provide them air and light. Whether the numerator and denominator grow depends on what you do with them. If you wish to say that they *can* grow enormous numerators and denominators, I won't argue, but implying that *must* and will *always* grow is misleading. It's pure propaganda. And if they do... well, longs can also "quickly grow enormous". That hasn't stopped Python integrating ints and longs. The programmer is expected to deal with it. Integrating floats and rationals isn't even on the table for discussion. Anyone using rationals is making a conscious choice to do so and can deal with the consequences. > * In order to have a canonical representation of integers, they need to > be kept in normalised form. Oh noes! Not normalised form!!! Is this supposed to be an objection? > * Nobody uses big fractions apart from mathematicians (and maybe > bookmakers?). Putting the cart before the horse. Nobody uses rationals because rationals aren't available! Nobody uses complex numbers except for mathematicians, and maybe a few electrical engineers, and they're a built in. Nobody uses math functions like sin and cos except for mathematicians and engineers, and they're available. The Forth programming language didn't even support floating point for many years. Programmers were expected to use the equivalent of rationals using integers. This was very successful, and avoided the gotchas that you get with floats. For example, with floats it is unavoidable to have unintuitive results like (x + y) - x != y and it isn't even very hard to find an example. >>> 3.1 + 0.7 - 3.1 == 0.7 False Such a bizarre result shouldn't happen with any non-buggy rational representation: 31/10 + 7/10 - 31/10 => 38/10 - 31/10 => 7/10 In the real world, people use fractions all the time, e.g. plumbers. (Not that I'm expecting plumbers to start taking laptops out to the building site in order to calculate pipe sizes.) > * Having yet another numerical type would make it difficult what type to > expect from a calculation. I simply don't believe that at all. It's not like calculations will suddenly start returning rationals unexpectedly, any more than they suddenly started returning Decimals unexpectedly. I find it bizarre that the simple to implement, simple to understand rational data type was rejected while the hard to implement, hard to understand Decimal was accepted. -- Steven -- http://mail.python.org/mailman/listinfo/python-list