/******************************************************************/ /* Random.h */ /* ----------------------- */ /* */ /* The file defines a random number generator class. This may */ /* not be the best random number generator around, but it works */ /* reasonably well, and gives a portable random class for use */ /* on multiple platforms (which may or may not have rand() or */ /* drand48(), or they may be broken). */ /* */ /* Chris Wyman (10/26/2006) */ /******************************************************************/ #include #include "Random.h" Random::Random( unsigned long seed ) : maxshort( 65536L ), multiplier( 1194211693L ), adder( 12345L ) { randSeed = ( seed ? seed : (unsigned long)time(0) ); } double Random::dRandom( void ) { randSeed = multiplier * randSeed + adder; return ((randSeed >> 16) % maxshort) / (double)maxshort; } float Random::fRandom( void ) { randSeed = multiplier * randSeed + adder; return ((randSeed >> 16) % maxshort) / (float)maxshort; } unsigned short Random::sRandom ( void ) { randSeed = multiplier * randSeed + adder; return (unsigned short)((randSeed >> 16) % maxshort); } unsigned char Random::cRandom ( void ) { randSeed = multiplier * randSeed + adder; return (unsigned char)((randSeed >> 16) % 256L ); } bool Random::bRandom ( void ) { randSeed = multiplier * randSeed + adder; return ((randSeed >> 16) & 0x00000001) > 0; // check if the last bit is on or off }