Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
ROOT::Math::MixMaxEngine< N, SkipNumber > Class Template Reference

template<int N, int SkipNumber>
class ROOT::Math::MixMaxEngine< N, SkipNumber >

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 2016 paper (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.0 beta 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 TestU01 suite

Dimension Entropy Decorrelation Time Iteration Time Relaxation Time Period q
N \(~h(T)\) \(\tau_0 = {1\over h(T) 2N }\) t \(\tau ={1\over h(T) \ln {1\over \delta v_0}}\) \(\log_{10} (q)\)
256 194 0.000012 1 95.00 4682 (full period is not confirmed)
8 220 0.00028 1 1.54 129
17 374 0.000079 1 1.92 294
240 8679 0.00000024 1 1.17 4389

The entropy \(h(T)\), decorrelation time \(\tau_0\) decorrelation time, relaxation time \(\tau\) and period of the MIXMAX generator, expressed in units of the iteration time \(t\), which is normalised to 1. Clearly \(\tau_0~ < t ~< \tau\).

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

Definition at line 102 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)
 
 ~MixMaxEngine () override
 
Result_t IntRndm ()
 generate a 64 bit integer number
 
double operator() ()
 generate a double random number (faster interface)
 
double Rndm () override
 
void RndmArray (int n, double *array)
 generate an array of random numbers
 
void SetSeed (Result_t seed)
 set the generator seed
 
- Public Member Functions inherited from ROOT::Math::TRandomEngine
virtual ~TRandomEngine ()
 

Static Public Member Functions

static uint64_t MaxInt ()
 maximum integer that can be generated. For MIXMAX is 2^61-1
 
static uint64_t MinInt ()
 minimum integer that can be generated. For MIXMAX is 0
 
static const char * Name ()
 get name of the generator
 
static int Size ()
 Get the size of the generator.
 

Protected Member Functions

int Counter () const
 Get the counter (between 0 and Size-1)
 
void GetState (std::vector< StateInt_t > &state) const
 get the state of the generator
 
void SetState (const std::vector< StateInt_t > &state)
 set the full initial generator state
 

Private Member Functions

double Rndm_impl ()
 implementation function to generate the random number
 

Private Attributes

MixMaxEngineImpl< N > * fRng
 mixmax internal engine class
 

#include <Math/MixMaxEngine.h>

Inheritance diagram for ROOT::Math::MixMaxEngine< N, SkipNumber >:
[legend]

Member Typedef Documentation

◆ BaseType

template<int N, int SkipNumber>
typedef TRandomEngine ROOT::Math::MixMaxEngine< N, SkipNumber >::BaseType

Definition at line 106 of file MixMaxEngine.h.

◆ Result_t

template<int N, int SkipNumber>
typedef uint64_t ROOT::Math::MixMaxEngine< N, SkipNumber >::Result_t

Definition at line 114 of file MixMaxEngine.h.

◆ StateInt_t

template<int N, int SkipNumber>
typedef uint64_t ROOT::Math::MixMaxEngine< N, SkipNumber >::StateInt_t

Definition at line 110 of file MixMaxEngine.h.

Constructor & Destructor Documentation

◆ MixMaxEngine()

template<int N, int S>
ROOT::Math::MixMaxEngine< N, S >::MixMaxEngine ( uint64_t  seed = 1)

Definition at line 35 of file MixMaxEngine.icc.

◆ ~MixMaxEngine()

template<int N, int S>
ROOT::Math::MixMaxEngine< N, S >::~MixMaxEngine
override

Definition at line 42 of file MixMaxEngine.icc.

Member Function Documentation

◆ Counter()

template<int N, int S>
int ROOT::Math::MixMaxEngine< N, S >::Counter
protected

Get the counter (between 0 and Size-1)

Definition at line 152 of file MixMaxEngine.icc.

◆ GetState()

template<int N, int S>
void ROOT::Math::MixMaxEngine< N, S >::GetState ( std::vector< StateInt_t > &  state) const
protected

get the state of the generator

Definition at line 141 of file MixMaxEngine.icc.

◆ IntRndm()

template<int N, int S>
uint64_t ROOT::Math::MixMaxEngine< N, S >::IntRndm

generate a 64 bit integer number

Definition at line 103 of file MixMaxEngine.icc.

◆ MaxInt()

template<int N, int S>
uint64_t ROOT::Math::MixMaxEngine< N, S >::MaxInt
static

maximum integer that can be generated. For MIXMAX is 2^61-1

Definition at line 111 of file MixMaxEngine.icc.

◆ MinInt()

template<int N, int S>
uint64_t ROOT::Math::MixMaxEngine< N, S >::MinInt
static

minimum integer that can be generated. For MIXMAX is 0

Definition at line 117 of file MixMaxEngine.icc.

◆ Name()

template<int N, int S>
const char * ROOT::Math::MixMaxEngine< N, S >::Name
static

get name of the generator

Definition at line 157 of file MixMaxEngine.icc.

◆ operator()()

template<int N, int SkipNumber>
double ROOT::Math::MixMaxEngine< N, SkipNumber >::operator() ( )
inline

generate a double random number (faster interface)

Definition at line 138 of file MixMaxEngine.h.

◆ Rndm()

template<int N, int SkipNumber>
double ROOT::Math::MixMaxEngine< N, SkipNumber >::Rndm ( )
inlineoverridevirtual

Implements ROOT::Math::TRandomEngine.

Definition at line 135 of file MixMaxEngine.h.

◆ Rndm_impl()

template<int N, int S>
double ROOT::Math::MixMaxEngine< N, S >::Rndm_impl
private

implementation function to generate the random number

Definition at line 92 of file MixMaxEngine.icc.

◆ RndmArray()

template<int N, int S>
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.

◆ SetSeed()

template<int N, int S>
void ROOT::Math::MixMaxEngine< N, S >::SetSeed ( Result_t  seed)

set the generator seed

Definition at line 53 of file MixMaxEngine.icc.

◆ SetState()

template<int N, int S>
void ROOT::Math::MixMaxEngine< N, S >::SetState ( const std::vector< StateInt_t > &  state)
protected

set the full initial generator state

Definition at line 130 of file MixMaxEngine.icc.

◆ Size()

template<int N, int S>
int ROOT::Math::MixMaxEngine< N, S >::Size
static

Get the size of the generator.

Definition at line 147 of file MixMaxEngine.icc.

Member Data Documentation

◆ fRng

template<int N, int SkipNumber>
MixMaxEngineImpl<N>* ROOT::Math::MixMaxEngine< N, SkipNumber >::fRng
private

mixmax internal engine class

Definition at line 170 of file MixMaxEngine.h.

  • math/mathcore/inc/Math/MixMaxEngine.h
  • math/mathcore/inc/Math/MixMaxEngine.icc