subtract_with_carry_engine, classe
Génère une séquence aléatoire en utilisant l'algorithme Substract With Carry (Lagged Fibonacci).
Syntaxe
template <class UIntType, size_t W, size_t S, size_t R>
class subtract_with_carry_engine;
Paramètres
UIntType
Type des résultats entiers non signés. Pour les types possibles, consultez <aléatoire>.
W
Taille de mot. Taille de chaque mot, en bits, de la séquence d'état. Condition préalable : 0 < W ≤ numeric_limits<UIntType>::digits
S
Décalage court. Nombre de valeurs entières. Condition préalable : 0 < S < R
R
Décalage long. Détermine la périodicité dans la série générée.
Membres
subtract_with_carry_engine::subtract_with_carry_engine
subtract_with_carry_engine::max
subtract_with_carry_engine::min
subtract_with_carry_engine::discard
subtract_with_carry_engine::operator()
subtract_with_carry_engine::seed
default_seed
est une constante membre, définie comme 19780503u
, utilisée comme valeur de paramètre par défaut pour subtract_with_carry_engine::seed
et le constructeur de valeur unique.
Pour plus d’informations sur les membres du moteur, consultez <aléatoire>.
Notes
Le substract_with_carry_engine
modèle de classe est une amélioration par rapport à la linear_congruential_engine. Aucun de ces moteurs n’est aussi rapide ni ne produit des résultats d’aussi bonne qualité que mersenne_twister_engine.
Ce moteur produit des valeurs d’un type intégral non signé spécifié par l’utilisateur à l’aide de la relation de périodicité (point), où a la valeur 1
si x(i - S) - x(i - R) - cy(i - 1) < 0
, sinon 0
, et M
a la valeur 2
W.cy(i)
x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M
L’état du moteur est un indicateur de transport plus des valeurs R. Ces valeurs se composent des dernières valeurs R retournées si operator()
elles ont été appelées au moins R fois, sinon les N
valeurs qui ont été retournées et les dernières R - N
valeurs de la valeur initiale.
L'argument de modèle UIntType
doit être assez volumineux pour contenir des valeurs jusqu'à M - 1
.
Bien que vous puissiez construire un générateur directement à partir de ce moteur, vous pouvez aussi utiliser l’un des typedefs prédéfinis suivants :
ranlux24_base
: utilisé comme base pour ranlux24
.
typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;
ranlux48_base
: utilisé comme base pour ranlux48
.
typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;
Pour plus d’informations sur la soustraction avec l’algorithme de moteur de transport, consultez l’article Wikipédia Legged Fibonacci generator.
Spécifications
Header :<random>
Espace de noms : std