Partager via


subtract_with_carry_engine, classe

Génère une séquence aléatoire en utilisant l'algorithme Substract With Carry (Lagged Fibonacci).

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 plus d'informations sur les types possibles, voir <random>.

  • 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::min

subtract_with_carry_engine::discard

subtract_with_carry_engine::operator()

subtract_with_carry_engine::max

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 moteurs, voir <random>.

Notes

La classe de modèle substract_with_carry_engine est une version améliorée du 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é (période) x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M, où cy(i) a la valeur 1 si x(i - S) - x(i - R) - cy(i - 1) < 0, sinon 0, et M a la valeur 2W. L'état du moteur est un indicateur de Carry plus R valeurs. Ces valeurs sont constituées des R dernières valeurs retournées si operator() a été appelé au moins R fois, sinon les N valeurs qui ont été retournées et les R - N dernières 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 également utiliser l'un des typedefs prédéfinis répertoriés dans le tableau suivant.

Nom

Description

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 l'algorithme de moteur Substract With Carry, voir l'article de Wikipedia Lagged Fibonacci generator.

Configuration requise

En-tête : <random>

Espace de noms : std

Voir aussi

Référence

<random>