Ashley Yakeley <[EMAIL PROTECTED]> writes: > At 2002-10-10 01:29, Ketil Z. Malde wrote: > > >I realize it's probably far from trivial, e.g. comparing two equal > >numbers could easily not terminate, and memory exhaustion would > >probably arise in many other cases. > > I considered doing something very like this for real (computable) > numbers, but because I couldn't properly make the type an instance of Eq,
instance Eq InfPoint where x (==) y == compareToPrecision epsilon x y where epsilon = unsafePerformIO ... A bit (perhaps not just a bit either) ugly, but comparable to using a fixed point, no? > I left it. Actually it was worse than that. Suppose I'm adding two > numbers, both of which are actually 1, but I don't know that: > > 1.000000000.... + > 0.999999999.... Could it be represented as data InfPoint = IP Integer FractionalPart data FractionalPart = FP Word8 | Repeat FractionalPart Thus: 1.00.. -> IP 1 (Repeat (FP 0)) 0.99.. -> IP 0 (Repeat (FP 9)) where the latter could be normalized to the former? Okay, you still get the problem comparing sqrt 2 == sqrt (sqrt 4) But wait a second: > The trouble is, as far as I know with a finite number of digits, the > answer might be > 1.9999999999937425 > or it might be > 2.0000000000013565 > ...so I can't actually generate any digits at all. But if you want to calcualte the sum for a finite number of digits, do you really care if you calculate it as 1.999..9 or 2.000..0 ? -kzm -- If I haven't seen further, it is by standing in the footprints of giants _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe