File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -32,8 +32,25 @@ lcgN = 1 `shl` 31 - 1
3232
3333-- | Step the linear congruential generator
3434lcgNext :: Int -> Int
35- lcgNext n = U .fromJust $ fromNumber $ (toNumber lcgM * toNumber n + toNumber lcgC) % toNumber lcgN
35+ lcgNext n = U .fromJust $ fromNumber $ (toNumber lcgM * n' + toNumber lcgC) % toNumber lcgN
36+ where
37+ -- Ensure that the input is between seedMin and seedMax; the LCG will not
38+ -- work well for other inputs.
39+ n' = ensureBetween (toNumber seedMin) (toNumber seedMax) (toNumber n)
40+
41+ ensureBetween :: Number -> Number -> Number -> Number
42+ ensureBetween min max n =
43+ let rangeSize = max - min
44+ in (((n % rangeSize) + rangeSize) % rangeSize) + min
3645
3746-- | Create a random seed
3847randomSeed :: forall e . Eff (random :: RANDOM | e ) Seed
39- randomSeed = randomInt 1 lcgM
48+ randomSeed = randomInt seedMin seedMax
49+
50+ -- | The minimum permissible Seed value.
51+ seedMin :: Seed
52+ seedMin = 1
53+
54+ -- | The maximum permissible Seed value.
55+ seedMax :: Seed
56+ seedMax = lcgM - 1
You can’t perform that action at this time.
0 commit comments