![](/img/trans.png)
[英]How can I generate a random boolean with probability (1 to 100) in C?
[英]How to generate a boolean with p probability using C rand() function?
如何使用C标准库rand()
函数生成概率为p
(其中0 <= p <= 1.0)的随机布尔值?
即
bool nextBool(double probability)
{
return ...
}
bool nextBool(double probability)
{
return (rand() / (double)RAND_MAX) < probability;
}
或(在看到其他回复后)
bool nextBool(double probability)
{
return rand() < probability * ((double)RAND_MAX + 1.0);
}
你的意思是生成一个随机变量,使p(1)= p和p(0)=(1-p)?
如果是,请将rand()
的输出与p*RAND_MAX
。
以下生成器不应该有偏差,因为rand()有效地统一和独立:
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 );
}
注意,虽然函数是递归的,
1.0/RAND_MAX
,即非常小, rand()
,如果你想使用不同于1.0/RAND_MAX
倍数的probability
。 还要注意,概率仍然有点偏颇。 看到这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.