Jump to content

Pseudo-random numbers/Combined recursive generator MRG32k3a: Difference between revisions

→‎{{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}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.