-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Fast Splittable PRNG -- -- Pure Haskell implementation of SplitMix described in -- -- Guy L. Steele, Jr., Doug Lea, and Christine H. Flood. 2014. Fast -- splittable pseudorandom number generators. In Proceedings of the 2014 -- ACM International Conference on Object Oriented Programming Systems -- Languages & Applications (OOPSLA '14). ACM, New York, NY, USA, -- 453-472. DOI: https://doi.org/10.1145/2660193.2660195 -- -- The paper describes a new algorithm SplitMix for -- splittable pseudorandom number generator that is quite fast: 9 -- 64 bit arithmetic/logical operations per 64 bits generated. -- -- SplitMix is tested with two standard statistical test suites -- (DieHarder and TestU01, this implementation only using the former) and -- it appears to be adequate for "everyday" use, such as Monte Carlo -- algorithms and randomized data structures where speed is important. -- -- In particular, it should not be used for cryptographic or security -- applications, because generated sequences of pseudorandom values -- are too predictable (the mixing functions are easily inverted, and two -- successive outputs suffice to reconstruct the internal state). @package splitmix @version 0.0.2 -- | SplitMix is a splittable pseudorandom number generator (PRNG) -- that is quite fast. -- -- Guy L. Steele, Jr., Doug Lea, and Christine H. Flood. 2014. Fast -- splittable pseudorandom number generators. In Proceedings of the -- 2014 ACM International Conference on Object Oriented Programming -- Systems Languages & Applications (OOPSLA '13). ACM, New York, -- NY, USA, 453-472. DOI: https://doi.org/10.1145/2660193.2660195 -- -- Guy L. Steele, Jr., Doug Lea, and Christine H. Flood. 2014. Fast -- splittable pseudorandom number generators. In Proceedings of the 2014 -- ACM International Conference on Object Oriented Programming Systems -- Languages & Applications (OOPSLA '14). ACM, New York, NY, USA, -- 453-472. DOI: https://doi.org/10.1145/2660193.2660195 -- -- The paper describes a new algorithm SplitMix for -- splittable pseudorandom number generator that is quite fast: 9 -- 64 bit arithmetic/logical operations per 64 bits generated. -- -- SplitMix is tested with two standard statistical test suites -- (DieHarder and TestU01, this implementation only using the former) and -- it appears to be adequate for "everyday" use, such as Monte Carlo -- algorithms and randomized data structures where speed is important. -- -- In particular, it should not be used for cryptographic or security -- applications, because generated sequences of pseudorandom values -- are too predictable (the mixing functions are easily inverted, and two -- successive outputs suffice to reconstruct the internal state). -- -- Note: This module supports all GHCs since GHC-7.0.4, but GHC-7.0 and -- GHC-7.2 have slow implementation, as there are no native -- popCount. module System.Random.SplitMix -- | SplitMix generator state. data SMGen -- | Generate a Word64. -- --
-- >>> take 3 $ map (printf "%x") $ unfoldr (Just . nextWord64) (mkSMGen 1337) :: [String] -- ["b5c19e300e8b07b3","d600e0e216c0ac76","c54efc3b3cc5af29"] --nextWord64 :: SMGen -> (Word64, SMGen) -- | Generate an Int. nextInt :: SMGen -> (Int, SMGen) -- | Generate a Double in [0, 1) range. -- --
-- >>> take 8 $ map (printf "%0.3f") $ unfoldr (Just . nextDouble) (mkSMGen 1337) :: [String] -- ["0.710","0.836","0.771","0.409","0.297","0.527","0.589","0.067"] --nextDouble :: SMGen -> (Double, SMGen) -- | Split a generator into a two uncorrelated generators. splitSMGen :: SMGen -> (SMGen, SMGen) -- | Preferred way to deterministically construct SMGen. -- --
-- >>> mkSMGen 42 -- SMGen 9297814886316923340 13679457532755275413 --mkSMGen :: Word64 -> SMGen -- | Initialize SMGen using system time. initSMGen :: IO SMGen -- | Derive a new generator instance from the global SMGen using -- splitSMGen. newSMGen :: IO SMGen -- | Create SMGen using seed and gamma. -- --
-- >>> seedSMGen 2 2 -- SMGen 2 3 --seedSMGen :: Word64 -> Word64 -> SMGen -- | Like seedSMGen but takes a pair. seedSMGen' :: (Word64, Word64) -> SMGen -- | Extract current state of SMGen. unseedSMGen :: SMGen -> (Word64, Word64) instance GHC.Show.Show System.Random.SplitMix.SMGen instance Control.DeepSeq.NFData System.Random.SplitMix.SMGen instance GHC.Read.Read System.Random.SplitMix.SMGen instance System.Random.RandomGen System.Random.SplitMix.SMGen