diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 4e299c19976..0d20d2abe20 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2006-06-15 Paolo Carlini + + * include/tr1/random.tcc (mersenne_twister<>::operator()()): + Reload the last position of the _M_x vector too. + 2006-06-15 Paolo Carlini * include/tr1/random (class xor_combine): Fix result_type typedef. diff --git a/libstdc++-v3/include/tr1/random.tcc b/libstdc++-v3/include/tr1/random.tcc index 57b071a585a..7fef4cb73ed 100644 --- a/libstdc++-v3/include/tr1/random.tcc +++ b/libstdc++-v3/include/tr1/random.tcc @@ -298,7 +298,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1) for (int __k = 0; __k < (__n - __m); ++__k) { _UIntType __y = ((_M_x[__k] & __upper_mask) - |(_M_x[__k + 1] & __lower_mask)); + | (_M_x[__k + 1] & __lower_mask)); _M_x[__k] = (_M_x[__k + __m] ^ (__y >> 1) ^ ((__y & 0x01) ? __a : 0)); } @@ -311,6 +311,10 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1) ^ ((__y & 0x01) ? __a : 0)); } + _UIntType __y = ((_M_x[__n - 1] & __upper_mask) + | (_M_x[0] & __lower_mask)); + _M_x[__n - 1] = (_M_x[__m - 1] ^ (__y >> 1) + ^ ((__y & 0x01) ? __a : 0)); _M_p = 0; }