[Haskell-cafe] Mersenne-random and standard random API

Jerzy Karczmarczuk jerzy.karczmarczuk at unicaen.fr
Thu Feb 9 12:32:39 CET 2012


Aleksey Khudyakov :
> I think design of Random type class basically precludes efficient 
> generators with large periods and consequently large state.
> Look at next function:
>
> > next :: g -> (Int, g)
>
> It means that state has to be copied but for efficiency we want to
> mutate it in place. I consider Random type class a failure and ignore
> it.
>
> P.S. For monte-carlo and thing like that I'd recommend mwc-random
> it more featureful than mersenne-random and don't rely on global state
I am afraid that Aleksey Khudakov confuses a few things.

1. Mersenne Twister, AND congruential generators AND the Marsaglia 
stuff, all use some kind of "seed", all are stateful. There are no 
miracles. Just look the agressive monadization, the form of defaultSeed, 
etc. within MWC.hs, before saying that this generator doesn't rely on 
some global state.

2. In the standard generator stuff the state is stored in IoRefs and is 
not "copied". Did Aleksey ever look inside the sources of these 
generators? In any case, the seed changes after each generation, and 
must be stored somewhere.

3. The API question is a conventional one. People who are really 
unhappy, may make their own interfaces, or give such a mini-project as a 
students' assignment, instead of weeping that the library is lousy and 
should be ignored. E. g., I wanted random numers in some purely 
functional, lazy context, and I didn't want the existing interface ; I 
manufactured a lazy stream interface, and that was all. "Look Ma!: no 
global state..."

4. L'Ecuyer signalled some 15 years ago that MWC generators introduce 
some bias on the most significant bits (complementary MWC are safer). 
This is less annoying that the last bits periodicity of simple 
congruential generators, but for SOME Monte-Carlo it may be harmful.

=======

In general, I believe that saying publicly that some part of the 
available library is a failure, should be avoided, unless accompanied by 
some SERIOUS analysis, and - if possible - some constructive suggestions.

With my thanks to all people who made those generators however imperfect 
they are. Only Mister Nobody is perfect.

Jerzy Karczmarczuk




More information about the Haskell-Cafe mailing list