Boost logo

Boost :

From: Tiago de Paula Peixoto (tiago_at_[hidden])
Date: 2005-01-25 13:03:59


On Tue, 2005-01-25 at 09:58 -0500, Neal Becker wrote:
> > Hi.
> >
> > The Mersenne Twister RNG was updated by the original author in 2002,
> > because of a small problem in the seeding procedure, which was that the
> > most significant bit of the seed was not well reflected to the state
> > vector. Read
> > http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html
> > for more details.
> >
> > The version implemented in Boost is the original 1998 one, which
> > contains the problem. The attached patch implements the new seeding
> > procedure, which uses something different than the linear congruential
> > RNG to initialize the state vector. I haven't identified the new
> > procedure to match any generator already implemented in Boost, so I just
> > wrote it there (please correct me if I'm wrong).
> >
> > I have compared the output to the official implementation output, and
> > it's identical.
> >
>
> This will cause the sequences to differ in the case of default
> initialization, correct? This will cause test vectors generated by the old
> implementation to mismatch with new implementation. If so, please note
> this in the documentation.

Not only in the case of default initialization, but every time, since
the new way the seed value populates the state vector is totally
different.

The only case the output sequence will be the same, is when the user
explicitly uses a linear congruential generator, with the same
parameters as the current implementation, as a seeding procedure.

So it's trivial to revert to the current behavior, if the user wants
backwards compatibility:

mt19937 rng;
linear_congruential<uint32_t, 69069, 0, 0, 0> gen(seed_value);
rng.seed(gen);

This is identical to the following, in the current (broken)
implementation:

mt19937 rng;
rng.seed(seed_value);

And yes, I agree, this should be noted in the documentation.

-- 
Tiago de Paula Peixoto <tiago_at_[hidden]>



Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk