True 64-bit Random Number Generators
as a good all-purpose pseudo random number generator I have always been fond of the Tausworthe-88 by P. L’Ecuyer.
That’s because of five main features this PRNG has:
1) it’s a simple algorithm and runs fast.
2) it passes all standard statistical tests.
3) its period (2^88) is long enough for music/audio and most applications.
4) its internal state is only 12 bytes. (fast and easy to seed + low memory requirements)
5) possible to run in parallel and therefore code it with SSE/AVX for extra speed.
Of course there is no real "perfect" RNG, but I found the Tausworthe-88 to provide the best compromise between quality and speed.
I have been using it as my default RNG for my MSP externals, where values need to be generated at the sampling rate and therefore speed and efficiency are an issue. That’s why I haven’t mentioned Mersenne Twister or TT800 yet, even though I am aware of those and I used them a few times. Very valid and useful RNGs in my opinion… of course more complex than Tausworthe and therefore slower and requiring more memory.
Now, the annoying thing I run into is that the Tausworthe-88 is by default a 32-bit RNG and now with Max/MSP running at 64-bit it would be a shame not to employ the full floating-point range for random number generation.
I did find an alternative, but I would like to put out there some very open questions:
- What are developers’ thoughts and opinions about true 64-bit RNGs?
- Has this been an issue at all for most people?
- What are the options/alternatives have you found out there?
- RNGs preferences?
Thanks for sharing…
The easiest way would be to concatenate two values from *high*quality* 32-bit RNGs (ie, don’t try this with the standard C rand() or Max [random], kids).
L’Ecuyer and Matsumoto and that crowd have all been working on 64-bit variants of Tausworthe, TT, Mersenne, et al. A quick Google turns up < http://www.gnu.org/software/gsl/manual/html_node/Random-number-generator-algorithms.html>, which has references to lots of literature.
Hope this helps,
"Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin"
Half-Joking, I was excited because Intel has been saying they’re making a hardware digital random number generator which exploits Johnson noise at 3 Gbps.
On the Ivy Bridge chips theres an instruction "RdRand" which is supposed to allow you to retrieve these 64-bit random values
Whats not so exciting is they’re patenting von Neumanns ideas for a statistically balanced output converter/corrector.. Oy