-- 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.1 -- | 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). module System.Random.SplitMix -- | SplitMix generator state. data SMGen -- | Generate a Word64. nextWord64 :: SMGen -> (Word64, SMGen) -- | Generate an Int. nextInt :: SMGen -> (Int, SMGen) -- | Generate a Double in [0, 1) range. nextDouble :: SMGen -> (Double, SMGen) -- | Split a generator into a two uncorrelated generators. splitSMGen :: SMGen -> (SMGen, SMGen) -- | Preferred way to deterministically construct SMGen. 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 :: 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 System.Random.RandomGen System.Random.SplitMix.SMGen