A good random number generator for C
This seems like a good use-case for the Mersenne Twister
- It's faster than most standard implementations of rand()
- It has a very long (2^19937 − 1) period
- It has a pretty high quality - it passes most standardized randomness tests
- It's public domain
If you are looking for a very fast, decent quality algorithm, you should think about
xorshift1024*. 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/
Void Star 8 months
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.
UmNyobe almost 10 yearsno, he is giving a candidate. +1 btw, never heard of Mersenne before
Void Star almost 10 yearsWow, this looks like a REALLY good random number generator. Thanks so much Philipp, I would never have found this on my own.
Steve Jessop almost 10 yearsI'm surprised that MT is faster than most implementations of
rand()commonly an LCG, hence very fast but poor quality?
zeboidlund over 9 yearsConsidering the fact that this actually turned my non-working
rand()-based algorithm into something I could actually work with, +1!
Void Star about 6 yearsunderappreciated answer here - I've used these in a couple projects so far and they work great, with such a simple implementation!