module Data.Random.Internal.Words where
import Foreign
import GHC.IOBase
import Data.Bits
import Data.Word
import Control.Monad
buildWord :: Word8 -> Word8 -> Word8 -> Word8 -> Word8 -> Word8 -> Word8 -> Word8 -> Word64
buildWord b0 b1 b2 b3 b4 b5 b6 b7
= unsafePerformIO . allocaBytes 8 $ \p -> do
pokeByteOff p 0 b0
pokeByteOff p 1 b1
pokeByteOff p 2 b2
pokeByteOff p 3 b3
pokeByteOff p 4 b4
pokeByteOff p 5 b5
pokeByteOff p 6 b6
pokeByteOff p 7 b7
peek (castPtr p)
wordToFloat :: Word64 -> Float
wordToFloat x = (encodeFloat $! toInteger (x `shiftR` ( 41 ))) $ (23)
wordToDouble :: Word64 -> Double
wordToDouble x = (encodeFloat $! toInteger (x `shiftR` ( 12 ))) $ (52)