|
Boost : |
From: John Maddock (john_at_[hidden])
Date: 2006-03-17 14:28:30
I seriously hope I'm doing something wrong here, but the last 20 bits in a
double returned from uniform_real appear to always be zero. Is this by
design? I really hope not!
Here's the test code:
template <class T>
void test_random(T)
{
boost::mt19937 rnd;
boost::uniform_real<T> ur_a(0.5, 1);
boost::variate_generator<std::tr1::mt19937, std::tr1::uniform_real<T> >
gen(rnd, ur_a);
for(int j = 0; j < INT_MAX-2; ++j)
{
T v = gen();
// get the digits of T:
unsigned long long i = (unsigned long long)std::floor(std::ldexp(v,
std::numeric_limits<T>::digits));
i &= 0xfffff; // last 20 bits
std::cout << std::hex << i << std::endl;
}
}
Try calling with a double as an argument and it'll output nothing but
zero's.
John.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk