Repository : ssh://darcs.haskell.org//srv/darcs/packages/random On branch : master
http://hackage.haskell.org/trac/ghc/changeset/ca16c628a340107aba04d75757910cecac90c4f3 >--------------------------------------------------------------- commit ca16c628a340107aba04d75757910cecac90c4f3 Author: Ryan Newton <[email protected]> Date: Sun Jun 26 22:52:08 2011 -0400 Minor: Added a bit of testing related code corresponding to ticket 5278. >--------------------------------------------------------------- Benchmark/SimpleRNGBench.hs | 20 ++++++++++++++++++-- System/Random.hs | 1 + 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Benchmark/SimpleRNGBench.hs b/Benchmark/SimpleRNGBench.hs index 2d1bd72..4b4d42d 100644 --- a/Benchmark/SimpleRNGBench.hs +++ b/Benchmark/SimpleRNGBench.hs @@ -21,7 +21,7 @@ import Data.IORef import Data.Word import Data.List hiding (last,sum) import Data.Int -import Data.List.Split +import Data.List.Split hiding (split) import Text.Printf import Foreign.Ptr @@ -80,7 +80,6 @@ measureFreq = do return$ fromIntegral (t2 - t1) ---------------------------------------------------------------------------------------------------- --- Drivers to get random numbers repeatedly. -- Test overheads without actually generating any random numbers: data NoopRNG = NoopRNG @@ -92,6 +91,23 @@ instance SplittableGen NoopRNG where #endif split g = (g,g) +-- An RNG generating only 0 or 1: +data BinRNG = BinRNG StdGen +instance RandomGen BinRNG where + next (BinRNG g) = (x `mod` 2, BinRNG g') + where (x,g') = next g +#if 1 + genRange _ = (0,1) +instance SplittableGen BinRNG where +#endif + split (BinRNG g) = (BinRNG g1, BinRNG g2) + where (g1,g2) = split g + +mkBinRNG = BinRNG . mkStdGen + +---------------------------------------------------------------------------------------------------- +-- Drivers to get random numbers repeatedly. + type Kern = Int -> Ptr Int -> IO () -- [2011.01.28] Changing this to take "count" and "accumulator ptr" as arguments: diff --git a/System/Random.hs b/System/Random.hs index b36cb28..693566f 100644 --- a/System/Random.hs +++ b/System/Random.hs @@ -418,6 +418,7 @@ randomIvalInteger (l,h) rng randomFrac :: (RandomGen g, Fractional a) => g -> (a, g) randomFrac = randomIvalDouble (0::Double,1) realToFrac +-- BUG: Ticket #5133 - this was found to generate the hi bound for Floats: randomIvalFrac :: (RandomGen g, Real a, Fractional b) => (a,a) -> g -> (b, g) randomIvalFrac (a,b) = randomIvalDouble (realToFrac a, realToFrac b) realToFrac _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
