14#ifndef ARCANE_RANDOM_MRG32K3A_H
15#define ARCANE_RANDOM_MRG32K3A_H
19#include "arcane/utils/FatalErrorException.h"
21#include "arcane/random/RandomGlobal.h"
56template<
typename RealType, Int32 val>
60 typedef RealType result_type;
61 typedef RealType state_type;
62 static const bool has_fixed_range =
true;
63 static const Int32 min_value=0;
64 static const Int32 max_value=1;
100 _state[0] = (state_type) x0;
101 _state[1] = _state[0];
102 _state[2] = _state[1];
103 _state[3] = _state[2];
104 _state[4] = _state[3];
105 _state[5] = _state[4];
139 static RealType
apply(state_type* state)
143 p = 1403580.0*state[1] - 810728.0*state[0];
144 k =
static_cast<long>(p/4294967087.0); p-=k*4294967087.0;
if (p <0.0) p+=4294967087.0;
145 state[0] = state[1]; state[1]=state[2]; state[2]=p;
147 p=527612.0*state[5] - 1370589.0*state[3];
148 k=
static_cast<long>(p/4294944443.0); p-= k*4294944443.0;
if(p<0.0) p+=4294944443.0;
149 state[3] = state[4]; state[4]=state[5]; state[5]=p;
151 if(state[2] <= state[5])
return ((state[2]-state[5]+4294967087.0)/4294967087.0);
152 else return ((state[2]-state[5]) / 4294967087.0);
139 static RealType
apply(state_type* state) {
…}
161 result_type
min()
const {
return static_cast<result_type
>(min_value); }
169 result_type
max()
const {
return static_cast<result_type
>(max_value); }
186 {
return (_state[0] == rhs._state[0]) && (_state[1] == rhs._state[1]) && (_state[2] == rhs._state[2]) && (_state[3] == rhs._state[3]) && (_state[4] == rhs._state[4]) && (_state[5] == rhs._state[5]) ; }
190 state_type _state[6];
196typedef TMrg32k3a<Real,0> Mrg32k3a;
RealType getState(Integer i) const
Méthode qui retourne l'état du générateur pour l'index i. L'état complet du générateur est donnée par...
result_type min() const
Retourne la valeur minimum possible d'une séquence.
TMrg32k3a(state_type *state)
Constructeur avec initialisation du tableau de graines à partir du tableau state. state doit être un ...
TMrg32k3a(Int32 x0=1)
Constructeur avec initialisation du tableau de graines à partir de la valeur x0. L'appel à la méthode...
static Real apply(state_type *state)
RealType operator()()
Surdéfinition de l'opérateur () qui retourne la valeur pseudo aléatoire du générateur....
bool validation(RealType x) const
Fonction de validation (je ne sais pas trop a quoi elle sert!)
result_type max() const
Retourne la valeur maximum possible d'une séquence.
bool operator==(const TMrg32k3a &rhs) const
Surdéfinition de l'opérateur ==.
Int32 Integer
Type représentant un entier.
double Real
Type représentant un réel.
std::int32_t Int32
Type entier signé sur 32 bits.