13#ifndef ARCANE_CORE_RANDOM_MRG32K3A_H
14#define ARCANE_CORE_RANDOM_MRG32K3A_H
18#include "arcane/utils/FatalErrorException.h"
20#include "arcane/core/random/RandomGlobal.h"
25namespace Arcane::random
48template<
typename RealType, Int32 val>
52 typedef RealType result_type;
53 typedef RealType state_type;
54 static const bool has_fixed_range =
true;
55 static const Int32 min_value=0;
56 static const Int32 max_value=1;
92 _state[0] = (state_type) x0;
93 _state[1] = _state[0];
94 _state[2] = _state[1];
95 _state[3] = _state[2];
96 _state[4] = _state[3];
97 _state[5] = _state[4];
131 static RealType
apply(state_type* state)
135 p = 1403580.0*state[1] - 810728.0*state[0];
136 k =
static_cast<long>(p/4294967087.0); p-=k*4294967087.0;
if (p <0.0) p+=4294967087.0;
137 state[0] = state[1]; state[1]=state[2]; state[2]=p;
139 p=527612.0*state[5] - 1370589.0*state[3];
140 k=
static_cast<long>(p/4294944443.0); p-= k*4294944443.0;
if(p<0.0) p+=4294944443.0;
141 state[3] = state[4]; state[4]=state[5]; state[5]=p;
143 if(state[2] <= state[5])
return ((state[2]-state[5]+4294967087.0)/4294967087.0);
144 else return ((state[2]-state[5]) / 4294967087.0);
153 result_type
min()
const {
return static_cast<result_type
>(min_value); }
161 result_type
max()
const {
return static_cast<result_type
>(max_value); }
178 {
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]) ; }
182 state_type _state[6];
188typedef TMrg32k3a<Real,0> Mrg32k3a;
bool operator==(const TMrg32k3a &rhs) const
Surdéfinition de l'opérateur ==.
static RealType apply(state_type *state)
Retourne la valeur pseudo aléatoire à partir de l'état state. L'état du générateur state doit être co...
result_type max() const
Retourne la valeur maximum possible d'une séquence.
result_type min() const
Retourne la valeur minimum possible d'une séquence.
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...
TMrg32k3a(state_type *state)
Constructeur avec initialisation du tableau de graines à partir du tableau state. state doit être un ...
void seed(Int32 x0)
Initialisation du tableau de graines à partir de la valeur x0. Le tableau de graines de ce générateur...
TMrg32k3a(Int32 x0=1)
Constructeur avec initialisation du tableau de graines à partir de la valeur x0. L'appel à la méthode...
bool validation(RealType x) const
Fonction de validation (je ne sais pas trop a quoi elle sert!)
RealType operator()()
Surdéfinition de l'opérateur () qui retourne la valeur pseudo aléatoire du géné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.