Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Génère une plage randomisé des graines.
template<class RandomAccessIterator>
void generate(
RandomAccessIterator first,
RandomAccessIterator last
) const;
Paramètres
first
Un itérateur d'accès aléatoire adressant la position du premier élément de la plage source.last
Un itérateur d'accès aléatoire adressant la position du dernier élément dans la plage source.
Notes
La fonction de modèle initialise les éléments de la séquence [first, last) (si la séquence est pas vide) comme suit :
const size_t s = vec.size();
const size_t n = last - first;
const size_t t = 623 <= n ? 11 : 68 <= n ? 7
: 39 <= n ? 5 : 7 <= n ? 3 : (n - 1) / 2;
const size_t p = (n - t) / 2;
const size_t q = p + t;
const size_t m = n <= s ? s + 1 : n;
size_t k;
for (k = 0; k < n; ++k)
first[k] = 0x8b8b8b8b;
for (k = 0; k < m; ++k)
{ // scramble and add any vector contribution
result_type r1 = 1664525
* xor27(first[k % n] ^ first[(k + p) % n] ^ first[(k - 1) % n]);
result_type r2 = r1
+ (k == 0 ? s : k <= s ? k % n + vec[k - 1] : k % n);
first[(k + p) % n] += r1;
first[(k + q) % n] += r2;
first[k] = r2;
}
for (; k < m + n; ++k)
{ // rescramble
result_type r3 = 1566083941
* xor27(first[k % n] + first[(k + p) % n] + first[(k - 1) % n]);
result_type r4 = r3 - k % n;
first[(k + p) % n] ^= r3;
first[(k + q) % n] ^= r4;
first[k] = r4;
}
La fonction xor27 est définie comme suit :
result_type xor27(result_type val) const
{ // shift and merge
return (val ^ (val >> 27));
}
Configuration requise
en-tête : <random>
l'espace de noms : DST