Sources:
Linear Congruential Method by D. Lehmer
Rules for above by D.E. Knuth
C++ implementation of LCM by R. Sedgewick
Dec 1995
Instantiate a new Random process by invoking the declaration:
Random new_process(int seed);and then, your sequence of random numbers may be obtained by sequentially calling
new_process.x_int() to get random integers or new_process.x_dbl() to get a random double value in [0,1) or new_process.x_gss(sigma) to get a normally distri. double in (inf,+inf)
e.g: Random x(2345678); cout << x.x_int();
The Gaussian generator is not efficient  it uses two random numbers to generate one normallydistributed one. Two such distributed values are actually available.
You can get a random seed using Random :: getSeed() This function uses the current time, process id, etc. to try to come up with a different number each time.
Public Member Functions  
Random (int seed)  
Create a new random process.  
int  x_int () 
Get the next random variable as integer uniformly distributed in the range [0,10^8).  
double  x_dbl () 
Get the next random variable as a double uniformly distributed in the range [0,1).  
double  x_gss (double sigma=1.0, double mean=0.0) 
Get the next random variable normally distributed with the requested mean and passed in standard deviation.  
Static Public Member Functions  
static int  getSeed () 
To get a constantly changing seed to pass into the constructor if needed. 
code::Random::Random  (  int  seed  )  [inline] 
Create a new random process.
static int code::Random::getSeed  (  )  [static] 
To get a constantly changing seed to pass into the constructor if needed.
double code::Random::x_dbl  (  ) 
Get the next random variable as a double uniformly distributed in the range [0,1).
double code::Random::x_gss  (  double  sigma = 1.0 , 

double  mean = 0.0  
) 
Get the next random variable normally distributed with the requested mean and passed in standard deviation.
int code::Random::x_int  (  ) 
Get the next random variable as integer uniformly distributed in the range [0,10^8).