43 lines
1.0 KiB
Haskell
43 lines
1.0 KiB
Haskell
module Generators
|
|
where
|
|
|
|
import Numeric(showHex)
|
|
import System.Random(RandomGen,random)
|
|
|
|
generateNum :: RandomGen g => g -> Word -> (Integer, g)
|
|
generateNum g size =
|
|
let (x, g') = random g
|
|
x' = x `mod` (2 ^ size)
|
|
in (x', g')
|
|
|
|
generateSignedNum :: RandomGen g => g -> Word -> (Integer, g)
|
|
generateSignedNum g size =
|
|
let (x, g') = random g
|
|
s :: Integer
|
|
(s, g'') = random g'
|
|
x' = x `mod` (2 ^ size)
|
|
sign = if even s then 1 else -1
|
|
in (x' * sign, g'')
|
|
|
|
modulate :: (Integral a, Integral b) => a -> b -> Integer
|
|
modulate x size = x' `mod` (2 ^ size')
|
|
where
|
|
x', size' :: Integer
|
|
size' = fromIntegral size
|
|
x' = fromIntegral x
|
|
|
|
modulate' :: (Num a, Integral a, Integral b) => a -> b -> Integer
|
|
modulate' x size = signum x' * ((abs x') `mod` (2 ^ size'))
|
|
where
|
|
x', size' :: Integer
|
|
size' = fromIntegral size
|
|
x' = fromIntegral x
|
|
|
|
showX :: Integer -> String
|
|
showX x | x < 0 = "-" ++ showX (abs x)
|
|
| otherwise = showHex x ""
|
|
|
|
showB :: Bool -> String
|
|
showB False = "0"
|
|
showB True = "1"
|