# Can I use one float random number to generate two random numbers, one discrete, one continuous?

I need two random numbers. The first one, u, is discrete and takes 70% of the time the value 0 and 30% of the time the value 1. The second one, v, is continuous and takes values uniformly inside [0, 1[.

Can I used only one random number, x, to generate u and v ? Such as:

u = 0 if x < 0.7 else 1
v = x / 0.7 if x < 0.7 else (x - 0.7) / 0.3


I'm wondering if this is correct and do not introduce any bias or artifact (correlation ?) between u and v because they are generated using the same x.

Also (it is more of a computer science question), but what about the floating point imprecisions implied by scaling x to get v ? Finally, is this can be extended if u takes more values (for example, 10% 0, 20% 1 and 70% 2). Thank you.

• Your approach seems to be OK to me. Regarding the floating point imprecision, it is intuitively clear that the "else" part will sample $v$ from more sparsely covered $[0,1[$. – Karel Macek Oct 30 '14 at 13:08

Theoretically, your approach is correct. Any correlation introduced between $u$ and $v$ would mean that te original random number $x$ fails some statistical test, i.e. the PRNG used is not very good. However, taking into account that random numbers are generally generated as integers and then sacled to floats, some bias in the lower bits may be introduced (and unavoidably so as you cannot create bits of information out of thin air).
Surely, the method can be extended to more values for $u$, but if any of the $u$-probabilities is too small, there may be too few remaining bits of random for $v$ ...