independent_bits_engine Class

Génère une séquence de nombres aléatoires avec un nombre de bits spécifié en réemballant de bits des valeurs retournées par le moteur de base.

template<class Engine,
    size_t W, class UIntType>
    class independent_bits_engine {
public:
    typedef Engine base_type;
    typedef typename base_type::result_type result_type;
    independent_bits_engine();
    explicit independent_bits_engine(const base_type& eng);
    explicit independent_bits_engine(result_type x0);
    explicit independent_bits_engine(seed_seq& seq);
    void seed();
    void seed(result_type x0);
    void seed(seed_seq& seq);
    const base_type& base() const;
    static const result_type min();
    static const result_type max();
    result_type operator()();
    void discard(unsigned long long count);
private:
    Engine stored_eng;
    int count;
    };

Paramètres

  • Engine
    Le type enregistré du moteur.

  • W
    Le paramètre du moteur de W.

  • UIntType
    Le type de résultat d'entier non signé.

Notes

Cette classe de modèle décrit <random> qui produit des valeurs en réemballant de bits des valeurs retournées par le moteur de base.Chaque Wrésultant - la valeur de bits se compose des champs d' N combinés comme suit :

  • Les premiers champs d' N0 incluent les bits de poids faible d' W0 les valeurs retournées par le moteur de base qui sont moins qu' Y0compressée, dans l'ordre décroissant d'importance.Les valeurs qui sont trop longues sont ignorées.

  • Les champs restants d' N - N0 incluent les bits de poids faible d' W0 + 1 les valeurs retournées par le moteur de base qui sont moins qu' Y1compressée, dans l'ordre décroissant d'importance.Les valeurs qui sont trop longues sont ignorées.

Les paramètres (autre que W) sont déterminés comme suit :

  • R est la plage de valeurs complète retournée par le moteur de base (stored_eng.max() - stored_eng.min() + 1, n'en supposant que pas de boucle se produit.)

  • M a la valeur floor(log2(R)).

  • N est initialement W / M + (W % M != 0).

  • W0 a la valeur W / N.

  • N0 a la valeur N - W % N.

  • Y0 a la valeur (R >> W0) << W0.

  • Y1 a la valeur (R >> W0 + 1) << W0 + 1.

  • Si Y0 / N < R - Y0 ensuite N est incrémenté et les quatre paramètres précédents sont redéterminés.

L'état du moteur est l'état d' stored_eng.La valeur de l'argument template W doit être supérieure à zéro et non supérieure au nombre de bits représentables dans result_type.

Configuration requise

en-tête : <random>

l'espace de noms : DST

Voir aussi

Référence

<random>

independent_bits_engine::base

independent_bits_engine::base_type

independent_bits_engine::discard

independent_bits_engine::independent_bits_engine

independent_bits_engine::operator()

independent_bits_engine::seed