#ifndef RANDOM_NUMBER_GENERATOR #define RANDOM_NUMBER_GENERATOR #include // used to generate random number from current seed and update seed const unsigned long maxshort = 65536L; const unsigned long multiplier = 1194211693L; const unsigned long adder = 12345L; class RandomNumber { private: // private member containing current seed unsigned long randSeed; public: // constructor. default 0 gives automatic seeding RandomNumber(unsigned long s = 0); // generate random integer 0 <= value <= n-1 unsigned short Random(unsigned long n); // generate random real number 0 <= value < 1.0 double fRandom(void); }; // seed the generator RandomNumber::RandomNumber (unsigned long s) { if (s == 0) randSeed = time(0); // automatic seeding using system time else randSeed = s; // user supplies the seed } // return random integer 0 <= value <= n-1 < 65536 unsigned short RandomNumber::Random (unsigned long n) { randSeed = multiplier * randSeed + adder; return (unsigned short)((randSeed >> 16) % n); } // return (value in range 0..65535) / 65536 double RandomNumber::fRandom (void) { return Random(maxshort)/double(maxshort); } #endif // RANDOM_NUMBER_GENERATOR