Kirk Haines wrote:
> Iowa includes a class, Iowa::ISAAC, which is a pure ruby implementation of 
> the ISAAC random number generator.
> 
> Here's the page that describes the algorithm:
> 
> http://burtleburtle.net/bob/rand/isaac.html
> 
> Basically, ISAAC is a very good random number generator, with no cycles 
> shorter than 2^40, with a very, very long expected cycle, and with an 
> unbiased and uniform distribution.
> 
> Is there any interest in this existing in a package of its own?  If so, I 
> could repackage it and release it seperately.
> 
> 
> Kirk Haines

How does ISAAC hold up under Marsaglia's "Die-Hard" test suite?  I 
believe Ruby is currently providing an implementation of the Mersenne 
Twister, which has aced the Die-Hard tests and has a cycle length on the 
order of 10^600, so I don't see a compelling reason to go with something 
else in terms of the quality of the random numbers.

The thing I WOULD like to see is Ruby's generator wrapped up as a class 
which provides separate, independent random stream objects.  That would 
enable Ruby to be used for serious simulation work.[**]

--paul


[**] - I've separated the following because most people probably aren't 
interested in the gory details.  Read on at your own peril of being bored.

To obtain greater statistical "leverage" from a simulation study, it's 
sometimes helpful to make multiple runs of your model in which you 
induce positive or negative correlation between pairs of models.  To get 
the desired correlation, you need to keep the random numbers 
synchronized between the two systems, so that the same value is used in 
the same place and same simulated time.  If everybody is drawing from 
the same source of randomness, and there are different numbers of 
objects in the two systems being compared, it's nearly impossible to 
maintain synchronization.  The most common solution is to give each 
object its own personal stream of random numbers, seeded independently 
of all the others.  Synchronization is still non-trivial, but at least 
it's possible if you can have multiple separately seeded generators.