$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Darren Cook (darren_at_[hidden])
Date: 2004-06-22 22:38:20
I vote for these instructions to go near the top of the docs; I also 
couldn't work out what I needed to do when I looked at Boost.Random a few 
months back, but these instructions make it sound fairly simple.
What I wanted to do was generate a random number in the full range of a 
integer template parameter, e.g. whether I used the template with unsigned 
char, or a 128-bit integer.  (in the end I decided to come back to this when 
I needed that flexibility and implemented using 32-bit integers and the 
standard library's srand48() and mrand48()).
So, can Boost.Random generate a random number to match the type?
Darren
> Assuming min and max are plain-vanilla integers, the
> following instructions:
> 
>   typedef boost::uniform_int<> UniformDist;
>   UniformDist dist(min,max);
> 
> produce an object named dist that holds your uniform
> distribution.  The following instructions:
> 
>   typedef boost::mt19937 BaseRNG;
>   BaseRNG rng;
> 
> produce a "base pseudo-random number generator", which
> produces numbers along the *entire* range of integers
> (-2^31 to +2^31 or something like that). 
> boost::mt19937 is one of many such generators provided
> by the library.
> 
> The following instruction puts it all together and
> gives you the random integer generator you want:
> 
>   boost::variate_generator<BaseRNG&,UniformDist>
>      your_generator(rng, dist);
> 
> Note the ampersand; your program will fail silently if
> you omit it.
> 
> The base random number generator (rng) holds the seed
> function; simply call
> 
>   rng.seed(42L);
> 
> or whatever seed you want to provide.
> 
> Finally, assuming you want to store your sequence in a
> vector<int>:
> 
>   vector<int> sample;
>   for (int c = 0; c < desired_size; c++)
>   {
>     sample.push_back(your_generator());
>   }