我对操作员有点困惑,并且随机生成使用.我想我只是问这个代码是否符合我的要求?
生成"随机" TRUE或FALSE取决于我分配函数的概率.
bool randtf(int probability) {
if ((rand() % 100) < probability)
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果randtf(63)它有63%的可能性TRUE?
任何指导都将非常感谢.谢谢.
是的,到了第一个近似值.
不,更准确. rand()返回一个介于0和之间的数字RAND_MAX,实际上它将始终是形式(1 << n) - 1.这不是100的倍数,因此当您使用模数时,您将无法获得完美均匀的分布.
您可以使用拒绝采样来解决这个问题.为了论证,我们假设RAND_MAX == 32767(即16位).第一步是保持生成随机数,拒绝它们直到你得到一个小于32700(100的最大倍数小于RAND_MAX).如果你那么做模数技巧,你将得到一个统一的分布.
当然,这假设一个理智,统计上强大的实现rand(),这是一个很大的假设!