Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TMrg32k3a.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* Mrg32k3a.h (C) 2000-2006 */
9/* */
10/* Ce fichier définit le patron de classe TMrg32k3a ainsi que la classe */
11/* associée Mrg32k3a. */
12/*---------------------------------------------------------------------------*/
13/*---------------------------------------------------------------------------*/
14#ifndef ARCANE_RANDOM_MRG32K3A_H
15#define ARCANE_RANDOM_MRG32K3A_H
16/*---------------------------------------------------------------------------*/
17/*---------------------------------------------------------------------------*/
18
19#include "arcane/utils/FatalErrorException.h"
20
21#include "arcane/random/RandomGlobal.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26ARCANE_BEGIN_NAMESPACE
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31RANDOM_BEGIN_NAMESPACE
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38
56template<typename RealType, Int32 val>
58{
59 public:
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;
65 /*---------------------------------------------------------------------------*/
66 /*---------------------------------------------------------------------------*/
73 explicit TMrg32k3a(Int32 x0 = 1)
74 {
75 seed(x0);
76 }
77 /*---------------------------------------------------------------------------*/
78 /*---------------------------------------------------------------------------*/
85 explicit TMrg32k3a(state_type *state)
86 {
87 for(Integer i=0;i<6;i++)
88 _state[i] = state[i];
89 }
90 /*---------------------------------------------------------------------------*/
91 /*---------------------------------------------------------------------------*/
98 void seed(Int32 x0) {
99 x0 = (x0 | 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];
106}
107 /*---------------------------------------------------------------------------*/
108 /*---------------------------------------------------------------------------*/
116 RealType getState(Integer i) const { return _state[i]; }
117 /*---------------------------------------------------------------------------*/
118 /*---------------------------------------------------------------------------*/
126 {
127 RealType _x;
128 _x = apply(_state);
129 return _x;
130 }
131 /*---------------------------------------------------------------------------*/
132 /*---------------------------------------------------------------------------*/
139 static RealType apply(state_type* state)
140 {
141 long k;
142 Real p;
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;
146
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;
150
151 if(state[2] <= state[5]) return ((state[2]-state[5]+4294967087.0)/4294967087.0);
152 else return ((state[2]-state[5]) / 4294967087.0);
153 }
154 /*---------------------------------------------------------------------------*/
155 /*---------------------------------------------------------------------------*/
161 result_type min() const { return static_cast<result_type>(min_value); }
162 /*---------------------------------------------------------------------------*/
163 /*---------------------------------------------------------------------------*/
169 result_type max() const { return static_cast<result_type>(max_value); }
170 /*---------------------------------------------------------------------------*/
171 /*---------------------------------------------------------------------------*/
177 bool validation(RealType x) const { return val == x; }
178 /*---------------------------------------------------------------------------*/
179 /*---------------------------------------------------------------------------*/
185 bool operator==(const TMrg32k3a& rhs) const
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]) ; }
187
188 private:
189
190 state_type _state[6];
191};
192
193/*---------------------------------------------------------------------------*/
194/*---------------------------------------------------------------------------*/
195
196typedef TMrg32k3a<Real,0> Mrg32k3a;
197
198/*---------------------------------------------------------------------------*/
199/*---------------------------------------------------------------------------*/
200
201RANDOM_END_NAMESPACE
202ARCANE_END_NAMESPACE
203
204/*---------------------------------------------------------------------------*/
205/*---------------------------------------------------------------------------*/
206
207#endif
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
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...
Definition TMrg32k3a.h:116
result_type min() const
Retourne la valeur minimum possible d'une séquence.
Definition TMrg32k3a.h:161
TMrg32k3a(state_type *state)
Constructeur avec initialisation du tableau de graines à partir du tableau state. state doit être un ...
Definition TMrg32k3a.h:85
TMrg32k3a(Int32 x0=1)
Constructeur avec initialisation du tableau de graines à partir de la valeur x0. L'appel à la méthode...
Definition TMrg32k3a.h:73
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...
Definition TMrg32k3a.h:139
RealType operator()()
Surdéfinition de l'opérateur () qui retourne la valeur pseudo aléatoire du générateur....
Definition TMrg32k3a.h:125
void seed(Int32 x0)
Initialisation du tableau de graines à partir de la valeur x0. Le tableau de graines de ce générateur...
Definition TMrg32k3a.h:98
bool validation(RealType x) const
Fonction de validation (je ne sais pas trop a quoi elle sert!)
Definition TMrg32k3a.h:177
result_type max() const
Retourne la valeur maximum possible d'une séquence.
Definition TMrg32k3a.h:169
bool operator==(const TMrg32k3a &rhs) const
Surdéfinition de l'opérateur ==.
Definition TMrg32k3a.h:185