00001 #include ".\random.h" 00002 00003 Random::Random(LongNatural Dimensionality_,RandomGenerator* rndGen) 00004 : Dimensionality(Dimensionality_) 00005 { 00006 InnerGenerator=rndGen; 00007 // Reciprocal = 1/(1.0+rndGen->Max()); 00008 } 00009 00010 Random::Random(RandomGenerator* rndGen){ 00011 InnerGenerator=rndGen; 00012 Dimensionality=1; 00013 } 00014 00015 Random* Random::clone() const 00016 { 00017 return new Random(*this); 00018 } 00019 00020 void Random::GetUniforms(valarray<Real>& variates) 00021 { 00022 for (LongNatural j=0; j < GetDimensionality(); j++) 00023 variates[j] = InnerGenerator->getUniform(); 00024 } 00025 00026 void Random::GetUniform(Real& variate) 00027 { 00028 variate = InnerGenerator->getUniform(); 00029 } 00030 00031 void Random::Skip(LongNatural numberOfPaths) 00032 { 00033 valarray<Real> tmp(GetDimensionality()); 00034 for (LongNatural j=0; j < numberOfPaths; j++) 00035 GetUniforms(tmp); 00036 } 00037 00038 void Random::SetSeed(LongNatural Seed) 00039 { 00040 InitialSeed = Seed; 00041 InnerGenerator->SetSeed(Seed); 00042 } 00043 00044 void Random::Reset() 00045 { 00046 InnerGenerator->SetSeed(InitialSeed); 00047 } 00048 00049 00050 void Random::ResetDimensionality(LongNatural NewDimensionality) 00051 { 00052 Dimensionality = NewDimensionality; 00053 InnerGenerator->SetSeed(InitialSeed); 00054 }