13 #ifndef ROOT_Math_MixMaxEngine
14 #define ROOT_Math_MixMaxEngine
37 class MixMaxEngineImpl;
102 template<
int N,
int SkipNumber>
103 class MixMaxEngine :
public TRandomEngine {
107 typedef TRandomEngine BaseType;
111 typedef uint64_t StateInt_t;
113 typedef unsigned long long StateInt_t;
115 typedef uint64_t Result_t;
118 MixMaxEngine(uint64_t seed=1);
120 virtual ~MixMaxEngine();
127 static uint64_t MaxInt();
130 static uint64_t MinInt();
133 void SetSeed(Result_t seed);
136 virtual double Rndm() {
return Rndm_impl(); }
139 inline double operator() () {
return Rndm_impl(); }
142 void RndmArray (
int n,
double * array);
148 static const char *Name();
154 void GetState(std::vector<StateInt_t> & state)
const;
158 void SetState(
const std::vector<StateInt_t> & state);
171 MixMaxEngineImpl<N> * fRng;
175 typedef MixMaxEngine<240,0> MixMaxEngine240;
176 typedef MixMaxEngine<256,2> MixMaxEngine256;
177 typedef MixMaxEngine<17,0> MixMaxEngine17;
179 extern template class MixMaxEngine<240,0>;
180 extern template class MixMaxEngine<256,0>;
181 extern template class MixMaxEngine<256,2>;
182 extern template class MixMaxEngine<256,4>;
183 extern template class MixMaxEngine<17,0>;
184 extern template class MixMaxEngine<17,1>;
185 extern template class MixMaxEngine<17,2>;