double RandGen::RandReal(double dmin, double dmax) // precondition: dmin <= dmax // postcondition: returns double in [dmin..dmax) { double width = dmax - dmin; return RandReal() * width + dmin; }
double RandGen::RandBell(double average) //precondition: average<0 //postcondition: returns double in [0..high value) // return values are normall distributed { double fac,r,v1,v2,value; do{ v1=2.0*RandReal()-1.0; v2=2.0*RandReal()-1.0; r=v1*v1+v2*v2; }while(r>=1.0 || r==0.0); fac=sqrt(-2.0*log(r)/r); value=(average+(v1*fac)*(average*.25)); if(value<0) return 0; else return value; }
int RandGen::RandInt(int max) // precondition: max > 0 // postcondition: returns int in [0..max) { return int(RandReal() * max); }