/***************************************************************************** * Copyright (c) 1998, 1999, Robert Klapper. All Rights Reserved. *---------------------------------------------------------------------------- *****************************************************************************/ #include "sd_rand.h" const unsigned long int sd_RandomGenerator::DefaultSeed = 1618033987; void sd_RandomGenerator::seed(unsigned long int j){ unsigned long int k; unsigned short int i, ii; rtable_[55] = j; k = 1; for(i = 1; i <= 54; i++){ ii = (21*i)%55; rtable_[ii] = k; k = j - k; j = rtable_[ii]; } for(i = 0; i <= 3; i++){ for(ii = 1; ii <= 55; ii++){ rtable_[ii] = rtable_[ii] - ((ii < 25) ? rtable_[ii+31] : rtable_[ii-24]); } } idx_ = 0; } unsigned long int sd_RandomGenerator::operator()(unsigned long int j){ if(++idx_ > 55){ idx_ = 1; } rtable_[idx_] = rtable_[idx_] - ((idx_ < 25) ? rtable_[idx_+31] : rtable_[idx_-24]); return rtable_[idx_]%j; }