00001 #include ".\parkmiller.h" 00002 #include "time.h" 00003 00004 ParkMiller::ParkMiller(LongNatural Seed_ ) : Seed(Seed_) 00005 { 00006 Seed != 0 ? Seed : clock(); 00007 } 00008 00009 ParkMiller::~ParkMiller() 00010 { 00011 } 00012 /* 00013 void ParkMiller::SetSeed(LongInteger Seed_) 00014 { 00015 Seed=Seed_; 00016 if (Seed ==0) 00017 Seed=1; 00018 } 00019 */ 00020 VeryLongNatural ParkMiller::Max() { 00021 return m-1; 00022 } 00023 00024 LongNatural ParkMiller::Min() { 00025 return 1; 00026 } 00027 00028 LongNatural ParkMiller::GetOneRandomInteger() { 00029 LongInteger k; 00030 k=Seed/q; 00031 00032 LongInteger Seed2; 00033 Seed2=a*(Seed-k*q)-r*k; 00034 00035 if (Seed2 < 0) 00036 Seed2 += m; 00037 00038 Seed=Seed2; 00039 return Seed; 00040 } 00041 00042 Real ParkMiller::getUniform() { 00043 return (GetOneRandomInteger()-0.5)/Real(m-1); 00044 } 00045 00046 void ParkMiller::SetSeed(LongNatural Seed_) { 00047 Seed=Seed_; 00048 if (Seed ==0) 00049 Seed=1; 00050 }