Anonymous user
Pseudo-random numbers/Combined recursive generator MRG32k3a: Difference between revisions
Pseudo-random numbers/Combined recursive generator MRG32k3a (view source)
Revision as of 10:53, 21 November 2021
, 2 years ago→{{header|Haskell}}: added solution
(GP) |
(→{{header|Haskell}}: added solution) |
||
Line 692:
4 : 19931
</pre>
=={{header|Haskell}}==
<lang haskell>import Control.Monad.State
randoms :: Int -> [Int]
randoms seed = evalState go ([seed,0,0],[seed,0,0])
where
go = do
(x1, x2) <- get
let x1i = sum (zipWith (*) x1 a1) `mod` m1
let x2i = sum (zipWith (*) x2 a2) `mod` m2
put (x1i:init x1, x2i:init x2)
((x1i - x2i) `mod` m1 :) <$> go
a1 = [0, 1403580, -810728]
m1 = 2^32 - 209
a2 = [527612, 0, -1370589]
m2 = 2^32 - 22853
randomsFloat = map ((/ (2^32 - 208)) . fromIntegral) . randoms</lang>
<pre>*Main> take 5 $ randoms 1234567
[1459213976,2827710105,4245671316,3877608660,2595287582]
*Main> let hist = map length . group . sort
*Main> hist . take 100000 $ (floor . (*5)) <$> randomsFloat 987654321
[20002,20060,19948,20059,19931]</pre>
=={{header|Java}}==
|