【发布时间】:2012-01-09 03:29:16
【问题描述】:
代码:
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
基本上,我希望这些数字中的每一个具有这些概率: 1:1/7 2:1/7 3:2/7 4:2/7 5:1/7
这段代码会给我正确的结果吗? IE。如果这是无限次运行,我会得到正确的频率吗?有没有更短的方法来做到这一点?
【问题讨论】:
-
使用开关代替,七个数字的大小写。
-
“正确”是指“不可预测的、独特的随机噪声”还是只是“在统计上正常”?
-
只是统计上没问题是我想要得到的 :)
-
如果
RAND_MAX是32768,您将获得(大致)4682/32768, 4681/32768, 9362/32768, 9362/32768, 4681/32768的分布。这在您预期频率的 0.03% 范围内。这在统计上可以吗? (注意前两个是不同的) -
@MooingDuck,定义“通常”。微软为 RAND_MAX 使用 0x7fff,他们的编译器被广泛使用。
标签: c++ random probability