#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
#include <math.h>
// 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;
syntax highlighted by Code2HTML, v. 0.9.1