Subject: Re: [boost] Problem with boost::random seed
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2011-01-25 11:45:01


AMDG

On 1/24/2011 11:29 AM, Anton Skvorts wrote:
> Testing boost::random with the following code
>
> boost::mt19937 gener(1);
> boost::normal_distribution<> normal(0,1);
> boost::variate_generator<boost::mt19937&,boost::normal_distribution<> >
> rng(gener, normal);
> cout<< rng()<< endl;
> cout<< rng()<< endl;
> cout<< rng()<< endl;
> gener.seed(2);
> cout<< rng()<< endl;
> cout<< rng()<< endl;
> cout<< rng()<< endl;
>
> I'm getting unexpected values after gener.seed(2)
> -2.971829031 1.706951063 -0.430498971
>
> -2.282022417 x
> -0.5887503675
> 0.2504171986
>
> The value -2.282022417 is the forth number in the sequence originated by
> gener(1) and not the first number in the sequence originated by gener.seed(2)
> as one would expect (this number is actually -0.5887503675). If I reseed
> next with gener.seed(3)it works fine, but if after that I reseed again with
> gener.seed(1) I'll get the same problem, and so on and off...
>
> How can I reseed the random number generator to overcome this problem?
>

This is because normal_distribution uses Box-Muller,
which generates pairs of normal variates. You need
to call rng.distribution().reset() to clear the cached
result.

In Christ,
Steven Watanabe