$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] [random] Problems generating pseudorandom 64-bit ints	across multiple computers
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2009-02-24 22:28:49
AMDG
James Madison wrote:
> I am currently developing a distributed application where many clients 
> need to generate unique 64-bit random numbers which will be used as 
> keys.  I am having problems getting boost to do this.  For my first 
> attempt, I tried something like the following:
>
>         boost::mt19937 RandomNumberGenerator::s_algorithm;
>
>         boost::uniform_int<unsigned long long> 
> RandomNumberGenerator::s_range(
>             std::numeric_limits<unsigned long long>::min(), 
> std::numeric_limits<unsigned long long>::max());
>
>         boost::variate_generator<boost::mt19937&, 
> boost::uniform_int<unsigned long long> >
>             
> RandomNumberGenerator::s_rng(RandomNumberGenerator::s_algorithm, 
> RandomNumberGenerator::s_range);
>
> I had two issues though:
>
> 1.  Is this really giving me random 64 bit numbers, or is it just 
> generating 32-bit numbers and then doing bit expansion?
mt19937 generates 32 bit integers.  uniform_int combines multiple 
invocations
of the underlying PRNG if necessary.
> 2.  The values always started with the same number.
>
> Trying to find a fix for #2, I though of using a hashed GUID as a 
> seed.  The problem is I noticed the seed value takes a 32 bit int, 
> which essentially means a 1/2^32 chance of the first value colliding 
> even if chosen completely randomly, which is unacceptable for my 
> application.
There is also seed functions which takes a pair of iterators.
In Christ,
Steven Watanabe