The Spacing of Binary Floating-Point Numbers
exploringbinary.com
exploringbinary.com
http://www.exploringbinary.com/the-spacing-of-decimal-floati...
This spacing is also why generating a random floating-point number the "naive" way will result in a non-uniform distribution.
The problem here is that the floats clump together around zero, and they spread out further away from zero. So the hat-method is biased towards smaller numbers.
A possible better method -- this is just an educated guess -- might be to divide your interval in half, pick the left or right half randomly, and then divide the resulting interval in half, etc. until your interval contains only one float. I'm not sure how efficient this would be to implement, or if there are any edge-cases to consider, but it would at least avoid the inherently biased distribution of the floats.
It wouldn't have maximum entropy, though.
It could probably be emulated in C++ with user defined types and overloaded operators. In C one could go the other way - '#define double float' and see if it breaks sooner ...
[1] https://itunes.apple.com/us/app/float-explorer/id928900898?m...