(no title)
GeorgeHaldane | 9 months ago
For floats there are essentially 3 approaches that are selected based on the provided range & PRNG:
1) Shift + multiply (like `(rng >> 11) * 0x1.0p-53`)
2) "Low-high" from the paper by J. Doornik
https://www.doornik.com/research/randomdouble.pdf
3) Canonical GCC implementation
All of these generate values in [0, 1) range which is now reflected in the docs properly. For most actual cases 1st method is the one selected.
listeria|9 months ago
So when you're generating floats with a 64-bit generator, instead of masking out the high bits with the static_cast, you may want to use the following: