#include #include #include #include // A handy pseudo random number generator class RandomGenerator { public: RandomGenerator (); unsigned int operator () (unsigned int Range); int operator () (int Range); int operator () (int Low, int High); char operator () (char Low, char High); double operator () (double Range); }; RandomGenerator::RandomGenerator () { struct timeval MyTime; gettimeofday (&MyTime, NULL); srand (MyTime.tv_usec); } inline unsigned int RandomGenerator::operator () (unsigned int Range) { // returns pseudo random integer in [0 .. Range) return (unsigned int) floor ((rand () / (RAND_MAX + 1.0) * Range)); } inline int RandomGenerator::operator () (int Range) { return (int) operator () ((unsigned int)Range); } inline int RandomGenerator::operator () (int Low, int High) { // returns pseudo random integer in [Low .. High) return operator ()((unsigned int) High - Low) + Low; } inline char RandomGenerator::operator () (char Low, char High) { // returns pseudo random integer in [Low .. High) return (char) operator ()((int)Low, (int) High); } inline double RandomGenerator::operator () (double Range) { // returns pseudo random double in [ -Range, Range ] return rand () / RAND_MAX * Range * 2 - Range; } static RandomGenerator Random;