Hi, im fairly new to C++ and would like help with using random number generators, i have heard of them but cant seem to find there code structure.
Any help is greatly appreciated :D

14 Years
Discussion Span
Last Post by tesuji


download that zip of .cpp files

File list

C++ header file containing class definitions.
You must #include this in all C++ files that use this library.

Random number generator of type Mersenne twister.

Random number generator of type RANROT-B.

Random number generator of type RANROT-W.

Random number generator of type Mother-of-all (multiply with carry).

Template class for combining any two of these random number generators.

Example showing how to use these random number generators.

That should help alot in understanding the generators. Be aware that not all generators work with all platforms as c++ is multiplatform the generators will behave differently depending on those conditions.

If you do a google on the generator names you should find which are platform specific.

RANROT-W will work for windows as a starter though. Have fun learning ! :D


Your C++ compiler comes with a random number generator, rand(). There's a tutorial on the site here:


If you're producing a serious application you'll want something a little more sophisticated but for many purposes it's adequate.


Well producing a random number is very simple. Before you use the random number:
1. include time.h.
2. just put randomize() at the beginning of code.
3. Then use random() or if you want a range of random number, for e.g out of 4 to 20 you want one, declare
random(n) returns numbers from 0 to n-1, hence 1 was added, so as general:
random(upper limit-lower limit +1) + lower;
Since random returns int, you have to store it in int variable.

I hope that much would make it clear. And I know that you really do not need too complicated random functions at this moment, for if it is,lol, dont ask me, i dont know. These are enough.


Hi Matthew,

below is a piece of code showing a pseudo random generator based on the linear congruential method by Lehmer to generating uniformly distributed random numbers over 0 ... s - 1. Random generators implemented in today programming languages are usually based on this method. Sure, they might be better and faster then mine, but lehmer is a complete random generator what also has rather good statistical properties. Its period is 2147483646.

unsigned long int lehmer(long int s)
//  linear congruential pseudo random number generator based on D. Lehmer
{  static unsigned long long a = 2007, b = 4194301, c = 2147483647, z = b;
    if ( s < 0 ) {s = -s; a = s;}
    z = (a + b * z) % c;
    return z % s;

If you call lehmer with s > 0, the random number is drawn from interval 0...s-1. Every time you start it with same s it produces the same sequence of random numbers, what is favorable when doing physical experiments. For game programming it s better to start it with s < 0 to initialize lehmer to produce various sequences. So s < 0 is kind of random seed.

Hope this will help you to understand how random generators work.

Theory of random generators can be found in D. Knuth: The Art of Computer Programming. One of the best set of random generators ever written is Mersenne Twister MTrand.


:'( oops sorry, now i got it: This thread was posted in 2003 ! Well, never mind ...

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.