From: Simon Marlow Date: Tue, 23 Feb 2010 10:16:03 +0000 (+0000) Subject: UNDO: Handle NaN, -Infinity and Infinity in the toRational for Float/Double (#3676) X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=ef78f2f4b5bd96219bcebac04affa86a58963fde;p=ghc-base.git UNDO: Handle NaN, -Infinity and Infinity in the toRational for Float/Double (#3676) --- diff --git a/GHC/Float.lhs b/GHC/Float.lhs index 61d009f..dbb556f 100644 --- a/GHC/Float.lhs +++ b/GHC/Float.lhs @@ -171,10 +171,7 @@ instance Num Float where fromInteger i = F# (floatFromInteger i) instance Real Float where - toRational x | isInfinite x = if x < 0 then -infinity else infinity - | isNaN x = notANumber - | isNegativeZero x = negativeZero - | otherwise = (m%1)*(b%1)^^n + toRational x = (m%1)*(b%1)^^n where (m,n) = decodeFloat x b = floatRadix x @@ -306,10 +303,7 @@ instance Num Double where instance Real Double where - toRational x | isInfinite x = if x < 0 then -infinity else infinity - | isNaN x = notANumber - | isNegativeZero x = negativeZero - | otherwise = (m%1)*(b%1)^^n + toRational x = (m%1)*(b%1)^^n where (m,n) = decodeFloat x b = floatRadix x @@ -719,7 +713,6 @@ fromRat (n :% 0) | n > 0 = 1/0 -- +Infinity fromRat (n :% d) | n > 0 = fromRat' (n :% d) | n < 0 = - fromRat' ((-n) :% d) - | d < 0 = 0/(-1) -- -0.0 | otherwise = encodeFloat 0 0 -- Zero -- Conversion process: diff --git a/GHC/Real.lhs b/GHC/Real.lhs index 71d35e6..971f276 100644 --- a/GHC/Real.lhs +++ b/GHC/Real.lhs @@ -54,10 +54,9 @@ ratioPrec, ratioPrec1 :: Int ratioPrec = 7 -- Precedence of ':%' constructor ratioPrec1 = ratioPrec + 1 -infinity, notANumber, negativeZero :: Rational +infinity, notANumber :: Rational infinity = 1 :% 0 notANumber = 0 :% 0 -negativeZero = 0 :% (-1) -- Use :%, not % for Inf/NaN; the latter would -- immediately lead to a runtime error, because it normalises.