C++ named requirements: RandomNumberEngine (since C++11)
Un moteur de nombres aléatoires est un objet fonction retournant des valeurs entières non signées telles que chaque valeur dans la plage des résultats possibles a (idéalement) une probabilité égale.
Tout moteur de génération de nombres aléatoires est également un UniformRandomBitGenerator , et peut donc être connecté à toute distribution de nombres aléatoires afin d'obtenir un nombre aléatoire (formellement, une variable aléatoire).
Exigences
Un type satisfait RandomNumberEngine s'il satisfait UniformRandomBitGenerator et, étant donnés les types et valeurs suivants, les exigences sémantiques et de complexité dans le tableau ci-dessous sont satisfaites :
| Type | Définition |
E
|
un type RandomNumberEngine |
T
|
E::result_type
|
| Valeur | Définition |
| e |
une valeur de type
E
|
| v |
une lvalue de type
E
|
| x , y |
des valeurs de type (éventuellement qualifié const)
E
|
| s |
une valeur de type
T
|
| q | une lvalue SeedSequence |
| z | une valeur de type unsigned long long |
| os | une lvalue dont le type est une spécialisation de std::basic_ostream |
| is | une lvalue dont le type est une spécialisation de std::basic_istream |
| n |
la
taille
de l'état de
E
|
| TA |
l'
algorithme de transition
de
E
|
| GA |
l'
algorithme de génération
de
E
|
| Expression | Type de retour | Sémantique | Complexité |
|---|---|---|---|
| E ( ) | N/A |
Crée un moteur avec le même état initial que tous les autres moteurs de type
E
construits par défaut.
|
O(n) |
| E ( x ) | Crée un moteur qui est égal à x . | O(n) | |
| E ( s ) | Crée un moteur dont l'état initial est déterminé par s . | O(n) | |
| E ( q ) |
Crée un moteur dont l'état initial est déterminé par un seul appel à
q.generate
.
|
identique à la complexité de
q.generate
appelé sur une séquence dont la longueur est
n
|
|
| e. seed ( ) | void | Postcondition : e == E ( ) . | identique à E ( ) |
| e. seed ( s ) | void | Postcondition : e == E ( s ) . | identique à E ( s ) |
| e. seed ( q ) | void | Postcondition : e == E ( q ) . | identique à E ( q ) |
| e ( ) |
T
|
Avance l'état de
e
de
e
i
à
e
i+1
(c'est-à-dire
TA
(
e
i
)
) et retourne
GA
(
e
i
)
.
|
amorti constant |
| e. discard ( z ) | void |
Avance l'état de
e
de
e
i
à
e
i+z
par tout moyen équivalent à
z
appels consécutifs de
e
(
)
.
|
pas pire que la complexité de z appels consécutifs de e ( ) |
| x == y | bool | Pour tout entier positif i , si les i -ièmes appels consécutifs de x ( ) et y ( ) retournent la même valeur, retourne true . Sinon retourne false . | O(n) |
| x ! = y | bool | ! ( x == y ) | O(n) |
| os << x | decltype ( os ) & |
Avec les fmtflags définis sur
std::
ios_base
::
dec
|
std::
ios_base
::
left
et le caractère de remplissage défini sur l'espace, écrit dans
os
la représentation textuelle de l'état actuel de
x
.
Postcondition : les fmtflags de os et le caractère de remplissage sont identiques à ceux d'avant. |
O(n) |
| is >> v | decltype ( is ) & |
Avec fmtflags défini sur
std::
ios_base
::
dec
, lit depuis
is
la représentation textuelle de l'état actuel de
v
. Si une entrée incorrecte est rencontrée, garantit que l'état de
v
reste inchangé par l'opération et appelle
is.
setstate
(
std::
ios_base
::
failbit
)
(ce qui peut lancer
std::ios_base::failure
).
Précondition : is fournit une représentation textuelle qui a été précédemment écrite en utilisant un flux de sortie pr satisfaisant toutes les conditions suivantes :
Postcondition : is a les mêmes fmtflags qu'auparavant. |
O(n) |
Bibliothèque standard
Les fonctionnalités suivantes de la bibliothèque standard satisfont RandomNumberEngine :
|
(C++11)
|
implémente l'algorithme
congruentiel linéaire
(modèle de classe) |
|
(C++11)
|
implémente l'algorithme
Mersenne twister
(modèle de classe) |
|
(C++11)
|
implémente l'algorithme de soustraction avec retenue (
Fibonacci retardé
)
(modèle de classe) |
|
(C++26)
|
un générateur parallélisable basé sur un compteur
(modèle de classe) |
|
(C++11)
|
ignore certaines sorties d'un moteur de nombres aléatoires
(modèle de classe) |
|
(C++11)
|
regroupe la sortie d'un moteur de nombres aléatoires en blocs d'un nombre spécifié de bits
(modèle de classe) |
|
(C++11)
|
délivre la sortie d'un moteur de nombres aléatoires dans un ordre différent
(modèle de classe) |
Les fonctionnalités suivantes de la bibliothèque standard satisfont UniformRandomBitGenerator mais pas RandomNumberEngine :
|
(C++11)
|
générateur de nombres aléatoires non déterministe utilisant une source d'entropie matérielle
(classe) |