13 #ifndef ROOT_Math_StdEngine
14 #define ROOT_Math_StdEngine
24 class StdRandomEngine {};
26 template<
class Generator>
27 struct StdEngineType {
28 static const char * Name() {
return "std_random_eng";}
31 struct StdEngineType<std::minstd_rand> {
32 static const char * Name() {
return "std_minstd_rand";}
35 struct StdEngineType<std::mt19937> {
36 static const char * Name() {
return "std_mt19937";}
39 struct StdEngineType<std::mt19937_64> {
40 static const char * Name() {
return "std_mt19937_64";}
43 struct StdEngineType<std::ranlux24> {
44 static const char * Name() {
return "std_ranlux24";}
47 struct StdEngineType<std::ranlux48> {
48 static const char * Name() {
return "std_ranlux48";}
51 struct StdEngineType<std::knuth_b> {
52 static const char * Name() {
return "std_knuth_b";}
55 struct StdEngineType<std::random_device> {
56 static const char * Name() {
return "std_random_device";}
73 template <
class Generator>
79 typedef StdRandomEngine BaseType;
80 typedef typename Generator::result_type Result_t;
82 StdEngine() : fGen() {
83 fCONS = 1./fGen.max();
87 void SetSeed(Result_t seed) { fGen.seed(seed);}
90 Result_t rndm = fGen();
91 if (rndm != 0)
return fCONS*rndm;
99 double operator() () {
103 static const char * Name() {
104 return StdEngineType<Generator>::Name();
107 static uint64_t MaxInt() {
return Generator::max(); }
116 extern template class StdEngine<std::mt19937_64>;
117 extern template class StdEngine<std::ranlux48>;