按赔率生成随机数

时间:2013-11-08 17:45:31

标签: c random

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

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

return result;

}   

感谢。

3 个答案:

答案 0 :(得分: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上都不平滑。

答案 1 :(得分:1)

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

rand()输出模数为100,如果结果小于或等于赔率,则返回true。

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

答案 2 :(得分:1)

bool randOdds(float odds) //odds should be a percentage between 0 and 1
{
   return ( rand()*(1.0/RAND_MAX) <= odds );
}