Dil*_*xel 5 c++ random probability
码:
int random = (rand() % 7 + 1)
if (random == 1) { } // num 1
else if (random == 2) { } // num 2
else if (random == 3 || random == 4) { } // num 3
else if (random == 5 || random == 6) { } // num 4
else if (random == 7) { } // num 5
Run Code Online (Sandbox Code Playgroud)
基本上我希望这些数字中的每一个具有以下每个概率:1:1/7 2:1/7 3:2/7 4:2/7 5:1/7
这段代码会给我正确的结果吗?即如果这是无限次运行,我会获得正确的频率吗?这样做的方法不那么冗长吗?
不是,它实际上略有偏离,因为rand()的工作方式.特别是,rand返回[0,RAND_MAX]范围内的值.假设RAND_MAX为10.然后rand()将给出0 ... 10,并将它们(按模数)映射到:
0 ? 0
1 ? 1
2 ? 2
3 ? 3
4 ? 4
5 ? 5
6 ? 6
7 ? 0
8 ? 1
9 ? 2
10 ? 3
Run Code Online (Sandbox Code Playgroud)
注意0-3比4-6更常见; 这是随机数生成的偏差.(你也加1,但这只是改变它).
RAND_MAX当然不是10,但它也可能不是7(减1)的倍数.最有可能是两个人的力量.所以你会有一些偏见.
我建议使用Boost随机数库,它可以为你提供一个随机数发生器,产生1-7而没有偏差.另请参阅bames53使用C++ 11的答案,如果您的代码只需要针对C++ 11平台,这是正确的方法.
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |