X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FFloat.lhs;h=cac8c0af164770f98753ff95c794ef38a5f29151;hb=91adf39c07706a188278aa6983e9b4f1ea4f400f;hp=9831ec90f35a7ff8e52872c75503826c77b9e762;hpb=aaf764b3ad8b1816d68b5f27299eac125f08e1a5;p=haskell-directory.git diff --git a/GHC/Float.lhs b/GHC/Float.lhs index 9831ec9..cac8c0a 100644 --- a/GHC/Float.lhs +++ b/GHC/Float.lhs @@ -16,6 +16,7 @@ #include "ieee-flpt.h" +-- #hide module GHC.Float( module GHC.Float, Float#, Double# ) where import Data.Maybe @@ -188,10 +189,13 @@ instance Num Float where | otherwise = negate 1 {-# INLINE fromInteger #-} - fromInteger n = encodeFloat n 0 - -- It's important that encodeFloat inlines here, and that - -- fromInteger in turn inlines, - -- so that if fromInteger is applied to an (S# i) the right thing happens + fromInteger (S# i#) = case (int2Float# i#) of { d# -> F# d# } + fromInteger (J# s# d#) = encodeFloat# s# d# 0 + -- previous code: fromInteger n = encodeFloat n 0 + -- doesn't work too well, because encodeFloat is defined in + -- terms of ccalls which can never be simplified away. We + -- want simple literals like (fromInteger 3 :: Float) to turn + -- into (F# 3.0), hence the special case for S# here. instance Real Float where toRational x = (m%1)*(b%1)^^n