Any IEEE 754 bit-boffins here? A popular way of generating a uniform random double is to something like this:
uint u = *[32 random bits]* double rand = u / (double)uint.MaxValue; However, double has 53 (52?) bits of precision, so you get a deficient rand that can't produce a continuum of possible values. I found some code which claims to convert 2 x 32 bit randoms into a fully random double, like this: uint u1 = *[32 random bits]*; uint u2 = *[32 random bits]*; uint a = u1 >> 5, b = u2 >> 6; return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0); Can anyone explain this magic? Is this correct? *Greg K*