ROOT 6.18/05 Reference Guide |
MixMaxEngine is a wrapper class for the MIXMAX Random number generator. MIXMAX is a matrix-recursive random number generator introduced by G. Savvidy. The real implementation of the generator, written in C, is in the mixmax.h and mixmax.cxx files. This generator code is available also at hepforge: http://mixmax.hepforge.org The MIXMAX code has been created and developed by Konstantin Savvidy and it is released under GNU Lesser General Public License v3. This wrapper class provides 3 different variants of MIXMAX according to the template para extra parameter N. The extra parameter, `SkipNumber`, is used to perform additional iterations of the generator before returning the random numbers. For example, when `SkipNumber = 2`, the generator will have two extra iterations that will be discarder. MIXMAX with N = 240. This is a new version of the generator (version 2.0beta) described in the <a href="http://dx.doi.org/10.1016/j.chaos.2016.05.003">2016 paper</a> (3rd reference), with special number $s=487013230256099140$, $m=2^{51}+1$ and having a period of $10^{4389}$. MIXMAX with N = 17, from the 2.0beta version with $s=0$ and $m=2^{36}+1$. The period of the generator is $10^{294}$. MIXMAX with N = 256 from the 1.0 version. The period is (for `SkipNumber=0`) $10^{4682}$. For this generator we recommend in ROOT using a default value of `SkipNumber=2, while for the previous two generators skipping is not needed. This table describes the properties of the MIXMAX generators. MIXMAX is a genuine 61 bit generator on the Galois field GF[p], where $p=2^{61}-1$ is the Mersenne prime number. The MIXMAX generators with these parameters pass all of the BigCrush tests in the <a href="http://simul.iro.umontreal.ca/testu01/tu01.html">TestU01 suite</a\>.
The References for MIXMAX are G.K.Savvidy and N.G.Ter-Arutyunian, *On the Monte Carlo simulation of physical systems, J.Comput.Phys. 97, 566 (1991)*; Preprint EPI-865-16-86, Yerevan, Jan. 1986 K.Savvidy, *The MIXMAX random number generator*, Comp. Phys. Commun. 196 (2015), pp 161–165 http://dx.doi.org/10.1016/j.cpc.2015.06.003 K.Savvidy and G.Savvidy, *Spectrum and Entropy of C-systems MIXMAX Random Number Generator*, Chaos, Solitons & Fractals, Volume 91, (2016) pp. 33–38 http://dx.doi.org/10.1016/j.chaos.2016.05.003 @ingroup Random
Definition at line 114 of file MixMaxEngine.h.
Public Types | |
typedef TRandomEngine | BaseType |
typedef uint64_t | Result_t |
typedef uint64_t | StateInt_t |
Public Member Functions | |
MixMaxEngine (uint64_t seed=1) | |
virtual | ~MixMaxEngine () |
Result_t | IntRndm () |
generate a 64 bit integer number More... | |
double | operator() () |
generate a double random number (faster interface) More... | |
virtual double | Rndm () |
void | RndmArray (int n, double *array) |
generate an array of random numbers More... | |
void | SetSeed (Result_t seed) |
set the generator seed More... | |
Public Member Functions inherited from ROOT::Math::TRandomEngine | |
virtual | ~TRandomEngine () |
virtual double | Rndm ()=0 |
Static Public Member Functions | |
static uint64_t | MaxInt () |
maximum integer that can be generated. For MIXMAX is 2^61-1 More... | |
static uint64_t | MinInt () |
minimum integer that can be generated. For MIXMAX is 0 More... | |
static const char * | Name () |
get name of the generator More... | |
static int | Size () |
Get the size of the generator. More... | |
Protected Member Functions | |
int | Counter () const |
Get the counter (between 0 and Size-1) More... | |
void | GetState (std::vector< StateInt_t > &state) const |
get the state of the generator More... | |
void | SetState (const std::vector< StateInt_t > &state) |
set the full initial generator state More... | |
Private Member Functions | |
double | Rndm_impl () |
implementation function to generate the random number More... | |
Private Attributes | |
MixMaxEngineImpl< N > * | fRng |
#include <Math/MixMaxEngine.h>
typedef TRandomEngine ROOT::Math::MixMaxEngine< N, SkipNumber >::BaseType |
Definition at line 118 of file MixMaxEngine.h.
typedef uint64_t ROOT::Math::MixMaxEngine< N, SkipNumber >::Result_t |
Definition at line 126 of file MixMaxEngine.h.
typedef uint64_t ROOT::Math::MixMaxEngine< N, SkipNumber >::StateInt_t |
Definition at line 122 of file MixMaxEngine.h.
ROOT::Math::MixMaxEngine< N, S >::MixMaxEngine | ( | uint64_t | seed = 1 | ) |
Definition at line 35 of file MixMaxEngine.icc.
|
virtual |
Definition at line 42 of file MixMaxEngine.icc.
|
protected |
Get the counter (between 0 and Size-1)
Definition at line 152 of file MixMaxEngine.icc.
|
protected |
get the state of the generator
Definition at line 141 of file MixMaxEngine.icc.
uint64_t ROOT::Math::MixMaxEngine< N, S >::IntRndm |
generate a 64 bit integer number
Definition at line 103 of file MixMaxEngine.icc.
|
static |
maximum integer that can be generated. For MIXMAX is 2^61-1
Definition at line 111 of file MixMaxEngine.icc.
|
static |
minimum integer that can be generated. For MIXMAX is 0
Definition at line 117 of file MixMaxEngine.icc.
|
static |
get name of the generator
Definition at line 157 of file MixMaxEngine.icc.
|
inline |
generate a double random number (faster interface)
Definition at line 150 of file MixMaxEngine.h.
|
inlinevirtual |
Implements ROOT::Math::TRandomEngine.
Definition at line 147 of file MixMaxEngine.h.
|
private |
implementation function to generate the random number
Definition at line 92 of file MixMaxEngine.icc.
void ROOT::Math::MixMaxEngine< N, S >::RndmArray | ( | int | n, |
double * | array | ||
) |
generate an array of random numbers
Definition at line 123 of file MixMaxEngine.icc.
void ROOT::Math::MixMaxEngine< N, S >::SetSeed | ( | Result_t | seed | ) |
set the generator seed
Definition at line 53 of file MixMaxEngine.icc.
|
protected |
set the full initial generator state
Definition at line 130 of file MixMaxEngine.icc.
|
static |
Get the size of the generator.
Definition at line 147 of file MixMaxEngine.icc.
|
private |
Definition at line 182 of file MixMaxEngine.h.