0

我想在这个随机函数中添加一个参数,该参数表示返回 true 的几率,例如 rand_num(80) 将给出返回 true 的 80% 几率。

bool rand_num()             // randomize 0 or 1
{
int result =0;
srand(time(NULL));
result = (rand()%2);

return result;

}   

谢谢。

4

3 回答 3

3

所以两个人给出了相似的答案,都是简单的mod。两者都是错误的。正确版本:

bool randX(int X)
{
    do {
       int rnd = rand() & 127;
       if (rnd < X) return true;
       if (rnd >= X && rnd < 100) return false;
    } while (1);
}

请注意,使用 mod 会不稳定,因为 rand() 的分布在任意 mod 上并不平滑。

于 2013-11-08T17:54:09.070 回答
1

(编辑:有人建议这个答案是错误的,因为模数引入了偏差。实际上,如果您的应用程序足够敏感以受到偏差的影响,那么您不应该首先使用rand()。这是基于统计分析而不是假设性猜想。)

将您的输出取模rand()100,如果结果小于或等于赔率,则返回 true。

作为旁注,您并没有真正srand()正确使用。您通常应该在程序开始时调用它一次,而不是每次生成随机数时。

于 2013-11-08T17:48:54.043 回答
1
bool randOdds(float odds) //odds should be a percentage between 0 and 1
{
   return ( rand()*(1.0/RAND_MAX) <= odds );
}
于 2013-11-08T18:02:13.527 回答