/******************************************************************** /* /* Random number generator LFSR113 /* C++ class LFSR113 /* /* Following a suggestion of Pierre L'Ecuyer 1997 /* "Tables of maximally equidistributed combined LFSR generators" /* see http://www.iro.umontreal.ca/~lecuyer/papers.html /* /* The generator is initialized with a positive integer seed /* when an instance is defined /* /* Implementation by Thomas Vojta, vojtat@umr.edu /* /* History: /* 04 Sep 2007 v0.9 first implementation /* /***********************************************************************/ #define IA 16807 #define IM 2147483647 #define IQ 127773 #define IR 2836 #ifndef CRANDOM_H #define CRANDOM_H class lfsr113 { public: lfsr113(int seed); ~lfsr113(); public: unsigned int z4,z3,z2,z1; //must be saved between calls public: double drnd(void); // Returns double precision random number between 0 and 1 (open interval) int lrnd (void); // Returns random int precision random number between 0 and bound-1 private: // Private methods double rlfsr113(void); // Generates double random number int ilfsr113(void); // Generates an integer random number. */ void lfsrinit(int idum); // This method initializes random generator. */ }; #endif