Random.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef random_hh
00028 #define random_hh
00029
00030 #include <cstdlib>
00031 #include <cmath>
00032 #include <ctime>
00033
00034
00038 class Random {
00039 public:
00041 static unsigned long Seed(unsigned long seed = 0L)
00042 {
00043 srand(seed = (seed == 0L) ? time(NULL) : seed);
00044 return seed;
00045 }
00046
00048 static unsigned long Int() { return rand(); }
00049
00051 static long Int(long a, long b)
00052 {
00053 return a + static_cast<long>( Int()*(b-a+1.0) / (RAND_MAX+1.0) );
00054 }
00055
00057 static double Real(double a=0.0, double b=1.0)
00058 {
00059 return a + Int()*(b-a) / RAND_MAX;
00060 }
00061
00062
00063
00064
00065
00066
00067
00068
00070 static long NonUniformInt(double weight, long a, long b)
00071 {
00072 return static_cast<long>(pow(Real(0.0, 1.0), weight) * (b-a) + a);
00073 }
00074
00076 static double NonUniformReal(double weight, double a=0.0, double b=1.0)
00077 {
00078 return pow(Real(0.0, 1.0), weight) * (b-a) + a;
00079 }
00080
00082 static bool Probability(double p)
00083 {
00084 if (p <= 0.0) return false;
00085 if (p >= 1.0) return true;
00086
00087 return (Real(0.0,1.0) < p) ? true : false;
00088 }
00089 };
00090
00091
00092
00093 #endif