On Friday 21 May 2010 22:06:43, Henning Thielemann wrote: > On Fri, 21 May 2010, Daniel van den Eijkel wrote: > > Dear Haskellers, > > > > I just want to share an observation. I had to convert a Double to a > > Float value in an inner loop of an application, and I used somethin > > like this: > > > > xf = (fromRational $ toRational xd) :: Float > > I think realToFrac is the function to use here, and this might be > replaced by double2Float by an optimizer rule. I think double2Float is > from a GHC package and thus one should avoid to call double2Float > directly.
In GHC.Real: -- | general coercion to fractional types realToFrac :: (Real a, Fractional b) => a -> b realToFrac = fromRational . toRational {-# RULES "realToFrac/Int->Int" realToFrac = id :: Int -> Int #-} There are more rules elsewhere. If you compile with optimisations, GHC turns your realToFrac into double2Float# nicely, so it's okay to use realToFrac. However, without optimisations, no rules fire, so you'll get (fromRational . toRational). _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe