//----------------------------------------------------------------------
// IMPLEMENTATION FILE (rand2.cpp)
// This module exports a class for pseudorandom number generation
// Machine dependency: long ints must be at least 32 bits (4 bytes).
//----------------------------------------------------------------------
#include "rand2.h"
const long MULTIPLIER = 16807;
const long MAX = 2147483647;
const long QUOT = 127773; // Quotient of MAX / MULTIPLIER
const long REM = 2836; // Remainder of MAX / MULTIPLIER
// Private members of class:
// long currentSeed
//
// CLASSINV: 1 <= currentSeed < MAX
RandGen::RandGen( /* in */ long initSeed )
//..................................................................
// Constructor
// PRE: initSeed >= 1
// POST: 1 <= currentSeed < MAX
//..................................................................
{
initSeed = initSeed % MAX;
currentSeed = (initSeed > 0) ? initSeed : 1;
}
RandGen::RandGen()
//..................................................................
// Default constructor
// POST: currentSeed == 4
//..................................................................
{
currentSeed = 4;
}
float RandGen::NextRand()
//..................................................................
// POST: currentSeed == (currentSeed * MULTIPLIER) modulo MAX
// && FCTVAL == currentSeed / MAX
// NOTE: This is a prime modulus multiplicative linear congruential
// generator
//..................................................................
{
long temp = MULTIPLIER*(currentSeed%QUOT) - REM*(currentSeed/QUOT);
currentSeed = (temp > 0) ? temp : temp + MAX;
return float(currentSeed) / float(MAX);
}