![](/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.