Public feed #529391

Mine

public text v1 · immutable
Raw Edit
·published 2007-06-01 22:08 UTC
rendered paste body
instance Readable Double where
   readItem = {-# SCC "readItem::Double" #-}
              do W64# x# <- readItem :: Reader m => m Word64
                 return (D# (unsafeCoerce# x#))
{-
              do x <- readItem :: Reader m => m Word32
                 y <- readItem :: Reader m => m Word32
                 let negative = testBit x 31
                 let exp = fromIntegral (x `shiftR` 20 .&. 2047) :: Int
                 let xmant = fromIntegral (x .&. (2^20 - 1)) :: Integer
                 let mant = (xmant `shiftL` 32) .|. fromIntegral y
                 let num = case exp of
                            2047 -> case mant of
                                      0 -> 1.0 / 0.0
                                      _ -> 0.0 / 0.0
                            0 -> encodeFloat mant (-1022 - 52)
                            _ -> encodeFloat (mant `setBit` 52)
                                             (exp - 1023 - 52)
                 return (if negative then -num else num)
-}