
Boost : 
From: Daniel James (daniel_james_at_[hidden])
Date: 20060318 10:28:17
Matthias Troyer wrote:
> It is actually very important that uniform_real creates numbers in a
> halfopen interval, and all random number libraries are actually
> implemented that way. To give just one example, the exponential
> distribution need to evaluate an expression like
>
> std::log(1.u)
>
> where u is a uniform random number in the interval [0,1.). If instead
> u were from the interval [0,1], it could take on the value 1.,
> leading to a zero argument to the log, and thus a problem. The half
> open interval is thus the right thing to do.
Sorry, I was mistaken about this. I thought that the output of mt19937
was being fed directly into uniform_real, but what actually happens is
that boost::variate_generator detects this situation and first uses
boost::uniform_01 to correctly convert the distribution into a halfopen
one. This also explains a lot of the other things which were puzzling me.
Daniel
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk