繁体   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