基于概率的真或假

Elg*_*oog 2 c++

我对操作员有点困惑,并且随机生成使用.我想我只是问这个代码是否符合我的要求?

生成"随机" TRUEFALSE取决于我分配函数的概率.

bool randtf(int probability) {
    if ((rand() % 100) < probability)
        return true;
    else
        return false;
}
Run Code Online (Sandbox Code Playgroud)

如果randtf(63)它有63%的可能性TRUE

任何指导都将非常感谢.谢谢.

Oli*_*rth 6

是的,到了第一个近似值.

不,更准确. rand()返回一个介于0和之间的数字RAND_MAX,实际上它将始终是形式(1 << n) - 1.这不是100的倍数,因此当您使用模数时,您将无法获得完美均匀的分布.

您可以使用拒绝采样来解决这个问题.为了论证,我们假设RAND_MAX == 32767(即16位).第一步是保持生成随机数,拒绝它们直到你得到一个小于32700(100的最大倍数小于RAND_MAX).如果你那么做模数技巧,你将得到一个统一的分布.

当然,这假设一个理智,统计上强大的实现rand(),这是一个很大的假设!