Many sampling algorithms take as input random numbers in the
[0..1) interval. On the other hand, Pseudo-Random Number Generators usually produce their output as (unsigned) integer 32-bit or 64-bit numbers.
It is trivial to turn an
u:u32 integer into an
f:[0..1] floating-point value, dividing
2^32-1. This is because
u ranges in
One might think that
u/2^32 would produce a floating-point value lower than 1. But it does not, as evidenced by this loop:
The number printed out happens to be
0x100000101 which is
( u / static_cast< f32_t >( 0x100000101ull ) ) is the
f:[0..1) we were looking for.
( u / static_cast< f64_t >( 0x100000080ull ) ) does the same in double-precision.