【发布时间】:2014-02-05 18:56:39
【问题描述】:
我尝试了一个使用 C++ 随机数生成器代码的小实验。我把代码贴出来给大家看看。
unsigned int array[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
unsigned int rand_seed = 4567;
int loop = 0;
srandom(rand_seed);
while (loop < 2147483647)
{
array[random() % 10]++;
loop++;
}
for (int i = 0; i < 10; i++)
{
cout << array[i] << endl;
}
这是一个简单的代码,这里不多解释。我了解到模运算会导致小偏差,在这种情况下,0 的出现应该高于其他值,因为 0 本身被计算在内,并且每当出现 10 时。但是当我显示我的array 的内容时,0 到 9(含)之间的所有数字的值几乎相同。
谁能告诉我这个偏见实际上是正确的还是不正确的?如果是,模运算确实会引入偏差,为什么我看不到呢?
用数学术语来说,我可以说我的随机变量 X 可以有 0 到 9(含)之间的确定值,并且通过绘制频率值(基本上是 array 值),结果图是一个概率密度函数。
只是为了让问题完整,我在array 中得到的结果。
214765115
214745521
214749449
214749304
214747088
214733986
214745858
214743477
214760340
214743509
【问题讨论】:
-
所提供的所有答案都得到了很好的解释,因此我赞成对所有答案进行投票。可悲的是,我只能选择一个来关闭线程。
标签: c++ math random statistics probability