From: MikkelFJ Date: 2001-07-30T03:29:53+09:00 Subject: [ruby-talk:18752] Re: Numbers classes.. Rational number? [was: Ruby as opposed to Python?] "Kent Dahl" wrote in message news:3B6461A6.65BE8F26@stud.ntnu.no... > > I'd like Rationals in Ruby, but a few divisions can run into huge > > BixNums for denominator and whatstheothercalled. That can be an > > unexpected speed slowdown. Guess you'd get: A different pretty cool number class is interval arithmetic. Given the topic of the discussion I thought I'd mention it. Interval arithmetic is not just a gimmick. It is possible to do exact calculations and reason about the accuracy of the result. Sun has been doing a lot of work in this area. If I recall correctly they have Java and C++ implementations. Interval arithmetic is more precise than float arithmetic. In reality float values belong to the class of rational numbers and cannot represent all real values, even within its valuerange. A value in intervalarithmetic is [lowerboundvalue, upperboundvalue]. If you are sure about the value, this could be [5, 5]. The you devid by [2, 2] This yields [2, 3]. That is, the value is within the range 2 and 3. In this case the exact value is 5/2 or 2.5. But remember that rational numbers cannot represent all values - like pi for instance. You can also use interval arithmetic with float values: [2.999, 3.0], or rationals: pi is_in [3/1, 22/7] Interval arithmetic is not particularly fast, but it is sometimes used in optimization problems where it can be rather fast, because the algorithms can make 100% exact decisions: [2.85, 2.99] is guaranteed to be different from [2.999, 3.0]. A variant of interval numbers is based on rational numbers: ([5, 5], 2) is 5/2. pi is_in [3, 22/7] = [21/7, 22/7] = ([21,22], 7) Another variant is [lowerbound, delta]. Each representationmakes some operations easier and others more difficult. BigInts can take up a lot of space, Interval arithmetic can be used to only store as many digits as makes sense with the given precision by using lowerbound, upperbound and a scale. Mikkel