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) -}