簡體   English   中英

如何使用C rand()函數生成具有p概率的布爾值?

[英]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. 遞歸調用的概率是1.0/RAND_MAX ,即非常小,
  2. 它必須是遞歸的或以其他方式多次調用rand() ,如果你想使用不同於1.0/RAND_MAX倍數的probability

還要注意,概率仍然有點偏頗。 看到這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM