How can I generate a random boolean with a probability of p (where 0 <= p <= 1.0) using the C standard library rand() function?
i.e.<
The following generator should not be biased, given rand() efficiently uniform and independent:
bool nextBool(double probability)
{
double p_scaled = probability * (RAND_MAX+1) - rand();
if ( p_scaled >= 1 ) return true;
if ( p_scaled <= 0 ) return false;
return random_bool( p_scaled );
}
Note, that while function is recursive,
1.0/RAND_MAX, i.e quite small,rand() multiple times, if you want to use probability different from multiples of 1.0/RAND_MAX.Also note, that the probability is still a little bit biased. See this question.