diff --git a/libcxx/include/__random/seed_seq.h b/libcxx/include/__random/seed_seq.h --- a/libcxx/include/__random/seed_seq.h +++ b/libcxx/include/__random/seed_seq.h @@ -109,23 +109,24 @@ __first[__q] += __r; __first[0] = __r; } + // initialize {(__k + x) % __n} indexing terms size_t __kmodn = 0; // __k % __n + size_t __k1modn = __n - 1; // (__k - 1) % __n size_t __kpmodn = __p % __n; // (__k + __p) % __n size_t __kqmodn = __q % __n; // (__k + __q) % __n - size_t __km1modn = __n - 1; // (__k-1) % __n for (size_t __k = 1; __k <= __s; ++__k) { if (++__kmodn == __n) __kmodn = 0; - if (++__km1modn == __n) - __km1modn = 0; + if (++__k1modn == __n) + __k1modn = 0; if (++__kpmodn == __n) __kpmodn = 0; if (++__kqmodn == __n) __kqmodn = 0; - result_type __r = 1664525 * _Tp(__first[__kmodn] ^ __first[__kpmodn] ^ __first[__km1modn]); + result_type __r = 1664525 * _Tp(__first[__kmodn] ^ __first[__kpmodn] ^ __first[__k1modn]); __first[__kpmodn] += __r; __r += __kmodn + __v_[__k - 1]; __first[__kqmodn] += __r; @@ -135,14 +136,14 @@ { if (++__kmodn == __n) __kmodn = 0; - if (++__km1modn == __n) - __km1modn = 0; + if (++__k1modn == __n) + __k1modn = 0; if (++__kpmodn == __n) __kpmodn = 0; if (++__kqmodn == __n) __kqmodn = 0; - result_type __r = 1664525 * _Tp(__first[__kmodn] ^ __first[__kpmodn] ^ __first[__km1modn]); + result_type __r = 1664525 * _Tp(__first[__kmodn] ^ __first[__kpmodn] ^ __first[__k1modn]); __first[__kpmodn] += __r; __r += __kmodn; __first[__kqmodn] += __r; @@ -152,14 +153,14 @@ { if (++__kmodn == __n) __kmodn = 0; - if (++__km1modn == __n) - __km1modn = 0; + if (++__k1modn == __n) + __k1modn = 0; if (++__kpmodn == __n) __kpmodn = 0; if (++__kqmodn == __n) __kqmodn = 0; - result_type __r = 1566083941 * _Tp(__first[__kmodn] + __first[__kpmodn] + __first[__km1modn]); + result_type __r = 1566083941 * _Tp(__first[__kmodn] + __first[__kpmodn] + __first[__k1modn]); __first[__kpmodn] ^= __r; __r -= __kmodn; __first[__kqmodn] ^= __r;