#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