[ moved to [EMAIL PROTECTED] ]

> The Prelude contains:
> 
> realToFrac:: (Real a, Fractional b) => a -> b
> realToFrac = fromRational . toRational
> 
> Unfortunately GHC currently does not optimize this into anything
> smarter than going through Rational. Fortunately it contains enough
> machinery so you can let it optimize it yourself :-)  Just add:
> 
> import NumExts (floatToDouble, doubleToFloat)
> 
> {-# RULES
> "realToFrac/Float->Double" realToFrac = floatToDouble
> "realToFrac/Double->Float" realToFrac = doubleToFloat #-}
> 
> and compile with  -syslib lang -O  and use realToFrac.

Is this 4.06?  The current prelude contains

{-# SPECIALIZE realToFrac ::
    Double      -> Rational, 
    Rational    -> Double,
    Float       -> Rational,
    Rational    -> Float,
    Rational    -> Rational,
    Double      -> Double,
    Double      -> Float,
    Float       -> Float,
    Float       -> Double #-}
realToFrac      :: (Real a, Fractional b) => a -> b
realToFrac      =  fromRational . toRational

which should provide for all your float-converting needs :-)

Cheers,
        Simon

Reply via email to