I need a good random number generator for a program I'm writing in C. It's a fractal flame generator, if you're interested. My images were coming out very grainy, even though I had success with the same algorithm in the past. The difference, I finally realized, was the random number generator I was using. Incredibly, it makes an ENORMOUS difference. I'm hoping that an even better random number generator might yield better results. The answer could come in the form of a code sample or a link to a pre-existing random number library. The most important requirements:
- it should produce relatively high quality streams of random numbers
- its period must be over ten billion
- it should be fast enough and offer a good performance trade-off.
This seems like a good use-case for the Mersenne Twister
If you are looking for a very fast, decent quality algorithm, you should think about
xorshift128+
orxorshift1024*
. They are almost as fast as LCGs (according to my comparison they are only 30% slower than simply inline LCG), having much better quality than LCG the same time.You can find their code and comparison here: http://xorshift.di.unimi.it/