First off, I notice there are no examples for generating floating point
values in Boost.Random, so maybe what follows is based on a
misunderstanding, or maybe not...
Lets say I generate values in [0,1] like so:
boost::random::mt19937 engine;
boost::random::uniform_01 d(engine);
FPT d = d(); //etc
Where FPT is some floating point type.
Now my concern is that we're taking a 32-bit random integer and
"stretching" it to a floating point type with rather more bits (53 for a
double, maybe 113 for a long double, even more in the multi-precision
world). So quantization effects will mean that there are many values
which can never be generated.
It's true that I could use independent_bits_engine to gang together
multiple random values and then pass that to uniform_01, however that
supposes we have an unsigned integer type available with enough bits.
cpp_int from boost.multiprecision would do it, and this does work, but
the conversions involved aren't particularly cheap. It occurs to me
that an equivalent to independent_bit_engine but for floating point
types could be much more efficient - especially in the binary floating
point case.
So I guess my questions are:
Am I worrying unnecessarily? and
What is best practice in this area anyway?
Thanks, John.