Changeset 3613 in Sophya for trunk/SophyaLib/TArray
- Timestamp:
- Apr 30, 2009, 7:07:46 PM (16 years ago)
- Location:
- trunk/SophyaLib/TArray
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/TArray/utilarr.cc
r3572 r3613 5 5 #include "machdefs.h" 6 6 #include "utilarr.h" 7 #include " stsrand.h"7 #include "randr48.h" 8 8 9 9 // Classe utilitaires … … 20 20 */ 21 21 22 / /! Constructor23 /*! 24 \param typ : generat or type25 \param m : mean parameter of the generator (if needed)26 \param s : sigma parameter of the generator (if needed)22 /*! 23 \brief constructor using a global default random generator ( RandomGeneratorInterface::GetGlobalRandGenP() ) 24 \param typ : generated random numbers distribution type: C_RND_Flat,C_RND_Gaussian,C_RND_Poisson,C_RND_Exponential 25 \param mean : mean value of the distribution 26 \param sigma : standard deviation of the distribution 27 27 */ 28 static RandomGenerator* uarg_ = NULL; 29 RandomSequence::RandomSequence(int typ, double m, double s) 30 { 31 typ_ = (typ == Flat) ? Flat : Gaussian; 32 mean_ = m; 33 sig_ = s; 34 if (uarg_ == NULL) uarg_ = new RandomGenerator(1024, true); 35 } 28 RandomSequence::RandomSequence(int typ, double mean, double sigma) 29 { 30 typ_ = (typ == Flat) ? C_RND_Flat: C_RND_Gaussian ; 31 mean_ = mean; 32 sig_ = sigma; 33 rgp_ = RandomGeneratorInterface::GetGlobalRandGenP(); 34 } 35 36 37 /*! 38 \brief constructor with the specification of a RandomGenerator object to be used. 39 \param rgen : RandomGeneratorInterface object that should stay valid as long as the RandomSequence object exist. 40 \param typ : generated random numbers distribution type: C_RND_Flat,C_RND_Gaussian,C_RND_Poisson,C_RND_Exponential 41 \param mean : mean value of the distribution 42 \param sigma : standard deviation of the distribution 43 */ 44 RandomSequence::RandomSequence(RandomGeneratorInterface& rgen, RNDTypes rtyp, double mean, double sigma) 45 { 46 typ_ = rtyp; 47 mean_ = mean; 48 sig_ = sigma; 49 rgp_ = &rgen; 50 } 51 36 52 RandomSequence::~RandomSequence() 37 53 { 38 54 } 39 55 40 //! Return random sequence values. 41 /*! 42 \return If typ = Flat : return [-1,+1]*sig + mean 43 \return If typ = Gaussian : return gaussian distributed 44 with \b mean mean and sigma \b sig 45 */ 46 double RandomSequence::Rand() 47 { 48 if (typ_ == Flat) 49 return(uarg_->Flatpm1()*sig_ + mean_); 50 else return(uarg_->Gaussian(sig_, mean_)); 51 } 52 56 double RandomSequence::Next() const 57 { 58 switch (typ_) { 59 case C_RND_Flat : 60 return rgp_->Flatpm1()*sig_ + mean_; 61 break; 62 case C_RND_Gaussian : 63 return rgp_->Gaussian(sig_, mean_); 64 break; 65 case C_RND_Poisson : 66 return rgp_->Poisson(mean_); 67 break; 68 case C_RND_Exponential : 69 return rgp_->Exponential(); 70 break; 71 default : 72 return rgp_->Flat01(); 73 break; 74 75 } 76 } 77 78 //! \brief Return the next random number 53 79 MuTyV & RandomSequence::Value(sa_size_t k) const 54 80 { 55 if (typ_ == Flat) retv_ = uarg_->Flatpm1()*sig_ + mean_; 56 else retv_ = uarg_->Gaussian(sig_, mean_); 81 retv_ = Next(); 57 82 return retv_; 58 83 } -
trunk/SophyaLib/TArray/utilarr.h
r2917 r3613 8 8 #include "machdefs.h" 9 9 #include "mutyv.h" 10 #include "randinterf.h" 10 11 11 12 #include <stdlib.h> … … 56 57 57 58 explicit RandomSequence(int typ = RandomSequence::Gaussian, double m=0., double s=1.); 59 explicit RandomSequence(RandomGeneratorInterface& rgen, RNDTypes rtyp=C_RND_Gaussian, double mean=0., double sigma=1.); 58 60 virtual ~RandomSequence(); 59 61 virtual MuTyV & Value(sa_size_t k) const ; 60 double Rand();62 double Next() const ; 61 63 62 64 protected: 63 inttyp_; //!< random generation type65 RNDTypes typ_; //!< random generation type 64 66 double mean_, sig_; //!< generation parameters mean and sigma (if needed) 65 67 mutable MuTyV retv_; 68 mutable RandomGeneratorInterface* rgp_; 66 69 }; 67 70
Note:
See TracChangeset
for help on using the changeset viewer.