//
// Uniform Random Number Generator.
//
// From Numerical Recipies Chapter 7.1 page 279.

#define IA 16807
#define IM 2147483647
#define AM (1.0/IM)
#define IQ 127773
#define IR 2836
#define MASK 123459876


float ran0(long *idum)
{
   long k;
   float ans;
   *idum ^= MASK; //XORing with MASK allows use of zero and other
   // simple bit patterns for idum.
   k=(*idum)/IQ;
   *idum=IA*(*idum-k*IQ)-IR*k; //Compute idum=(IA*idum) % IM without over-
   //flows by Schrage’s method.
   if (*idum < 0) *idum += IM;
   ans=AM*(*idum);             //Convert idum to a floating result.
   *idum ^= MASK;              //Unmask before return.
   return ans;
}

