Improve the state of building, moving towards addition working for signed numbers.

This commit is contained in:
2020-01-23 16:09:11 -08:00
parent ac01aad415
commit 89c297525a
6 changed files with 199 additions and 64 deletions

View File

@@ -2,7 +2,7 @@ module Generators
where
import Numeric(showHex)
import System.Random(RandomGen,random)
import System.Random(RandomGen,random,randomR)
generateNum :: RandomGen g => g -> Word -> (Integer, g)
generateNum g size =
@@ -12,12 +12,10 @@ generateNum g size =
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'')
let biggest = (2 ^ (size - 1)) - 1
smallest = - (2 ^ (size - 1))
(x, g') = randomR (smallest, biggest) g
in (x, g')
modulate :: (Integral a, Integral b) => a -> b -> Integer
modulate x size = x' `mod` (2 ^ size')