Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
InversiveCongruential.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/* InversiveCongruential.h (C) 2000-2006 */
9/* */
10/* Ce fichier définit le patron de classe InversiveCongruential ainsi qu'une */
11/* classe associée Hellekalek1995. Il est une version adaptée du fichier */
12/* InversiveCongruential.hpp provenant de la bibliothèque BOOST */
13/*---------------------------------------------------------------------------*/
14/*---------------------------------------------------------------------------*/
15#ifndef ARCANE_RANDOM_INVERSIVECONGRUENTIAL_H
16#define ARCANE_RANDOM_INVERSIVECONGRUENTIAL_H
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
20#include "arcane/utils/FatalErrorException.h"
21
22#include "arcane/random/RandomGlobal.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27ARCANE_BEGIN_NAMESPACE
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32RANDOM_BEGIN_NAMESPACE
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
54template<typename IntType, IntType a, IntType c, IntType m, IntType val>
56{
57 public:
58 typedef IntType result_type;
59 static const bool has_fixed_range = true;
60 static const result_type min_value = ( c == 0 ? 1 : 0 );
61 static const result_type max_value = m-1;
62 /*---------------------------------------------------------------------------*/
63 /*---------------------------------------------------------------------------*/
69 result_type min() const { return c == 0 ? 1 : 0; }
70 /*---------------------------------------------------------------------------*/
71 /*---------------------------------------------------------------------------*/
77 result_type max() const { return m-1; }
78 /*---------------------------------------------------------------------------*/
79 /*---------------------------------------------------------------------------*/
86 explicit InversiveCongruential(IntType x0 = 1)
87 : _x(x0)
88 {
89 }
90 /*---------------------------------------------------------------------------*/
91 /*---------------------------------------------------------------------------*/
97 void seed(IntType x0) { _x = x0; }
98 /*---------------------------------------------------------------------------*/
99 /*---------------------------------------------------------------------------*/
105 IntType getState() const { return _x; }
106 /*---------------------------------------------------------------------------*/
107 /*---------------------------------------------------------------------------*/
114 IntType operator()()
115 {
116 _x = apply(_x);
117 return _x;
118 }
119/*---------------------------------------------------------------------------*/
120/*---------------------------------------------------------------------------*/
128 static IntType apply(IntType x)
129 {
131 return x = do_mod::mult_add(a,do_mod::invert(x), c);
132 }
133 /*---------------------------------------------------------------------------*/
134 /*---------------------------------------------------------------------------*/
140 bool validation(IntType x) const { return val == x; }
141 /*---------------------------------------------------------------------------*/
142 /*---------------------------------------------------------------------------*/
149 { return _x == rhs._x; }
150
151 private:
152
153 IntType _x;
154};
155
156/*---------------------------------------------------------------------------*/
157/*---------------------------------------------------------------------------*/
158
159typedef InversiveCongruential<Int32, 9102, 2147483647-36884165,
160 2147483647, 0> Hellekalek1995;
161
162/*---------------------------------------------------------------------------*/
163/*---------------------------------------------------------------------------*/
164
165RANDOM_END_NAMESPACE
166ARCANE_END_NAMESPACE
167
168/*---------------------------------------------------------------------------*/
169/*---------------------------------------------------------------------------*/
170
171#endif
172
result_type max() const
Retourne la valeur maximum possible d'une séquence.
bool validation(IntType x) const
Fonction de validation (je ne sais pas trop a quoi elle sert!)
void seed(IntType x0)
Initialisation de la graine du générateur à partir de la valeur x0.
result_type min() const
Retourne la valeur minimum possible d'une séquence.
InversiveCongruential(IntType x0=1)
Constructeur avec initialisation de la graine à partir de la valeur x0.
IntType getState() const
Méthode qui retourne l'état générateur.
IntType operator()()
Surdéfinition de l'opérateur () qui retourne la valeur pseudo aléatoire du générateur....
bool operator==(const InversiveCongruential &rhs) const
Surdéfinition de l'opérateur ==.
static IntType apply(IntType x)
Retourne la valeur pseudo aléatoire à partir de l'état x. Le membre privée _x du générateur n'est pas...
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120