module Prelude (Fractional(..)) where import Numerator import Denominator import RatioCon import Num_Ratio import RealFrac_Ratio instance Fractional Double where x / y = x / y -- MAGIC fromRational x = let f ex = let y :: Double y = encodeFloat (round (x * (1 % bd) ^^ ex)) ex e' = snd (decodeFloat y) bd = floatRadix x' in if e' == ex then y else f e' e = snd (decodeFloat (fromInteger (numerator x) `asTypeOf` x' / fromInteger (denominator x))) x' = f e in x'