Main Page | Namespace List | Class Hierarchy | Compound List | File List | Compound Members | File Members | Related Pages

Random.hpp

Go to the documentation of this file.
00001 
00027 //
00028 //  File Random.hpp: random number generation
00029 //
00030 //  18/02/2000 Manchester
00031 //
00032 
00033 
00034 #ifndef __RANDOM__
00035 #  define __RANDOM__
00036 
00037 
00038 #include <cstdlib>
00039 #include <ctime>
00040 
00041 
00042 //******************* class Random ********************
00043 
00044 
00045 class Random 
00046 {
00047   // structure
00048   
00049   static int _seed;             // currently used random seed
00050   static int _remainingBits;    // remaining number if random bits 
00051   static const int _bitsPerInt; // number of random bits that can be extracted from one random integer
00052   static int _bits;             // integer used for extracting random bits
00053 
00054   static int bitsPerInt ();     // finds _bitsPerInt;
00055 
00056  public:
00057 
00058   // maximal random integer
00059   static int max ();
00060   // generate random integer between 0 and max
00061   static int integer ();
00062   // generate random integer between 0 and modulus-1
00063   static int integer ( int modulus );
00064   // generate random bit (0 or 1)
00065   static int bit ();
00066   // sets the random seed to s
00067   static void seed (int s);
00068   // show the current seed
00069   static int seed ();
00070   // make seed truly random (calls time ())
00071   static void trulyRandom ();
00072 }; // class Random
00073 
00074 
00075 //******************* class Random, implementation ********************
00076 
00077 
00078 inline
00079 void Random::seed ( int s )
00080 {
00081   _seed = s;
00082   srand ( s );
00083 }
00084 
00085 
00086 inline
00087 int Random::seed ()
00088 {
00089   return _seed;
00090 }
00091 
00092 
00093 inline
00094 int Random::max ()
00095 {
00096   return RAND_MAX;
00097 }
00098 
00099 
00100 inline
00101 int Random::integer ()
00102 {
00103   return rand ();
00104 }
00105 
00106 
00107 inline
00108 int Random::integer ( int modulus )
00109 {
00110   return integer () % modulus;
00111 }
00112 
00113 
00114 inline
00115 void Random::trulyRandom ()
00116 {
00117   seed ( time ( 0 ) );
00118 }
00119 
00120 
00121 inline
00122 int Random::bit ()
00123 {
00124   if ( _remainingBits == 0 ) {
00125     _remainingBits = _bitsPerInt;
00126     _bits = integer ();
00127   }
00128 
00129   int result = _bits % 2;
00130   _bits /= 2;
00131   _remainingBits --;
00132 
00133   return result;
00134 } // Random::bit
00135 
00136 
00137 #endif
00138 
00139 

Generated on Sat Jun 28 15:08:58 2003 for Vampire by doxygen 1.3.2