gpt4 book ai didi

c++ - 带模数的随机数生成器

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:15 25 4
gpt4 key购买 nike

我用 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;
}

代码很简单,这里就不多解释了。我了解到模运算会导致一个小的 bais,在这种情况下,0 的出现次数应该高于其他值,因为 0 本身会被计算在内,并且每当 10 出现时。但是当我显示我的 array 的内容时,0 到 9(含)之间的所有数字的值几乎相同。

谁能告诉我这种偏见到底是对还是错?如果是的话,模运算确实会引入偏差,为什么我看不到呢?

用数学术语来说,我可以说我的随机变量 X 可以有 0 到 9(含)之间的确定值,并且通过绘制频率值(本质上是 array 值),结果图是概率密度函数。

这里只是为了使问题完整,这是我在 array 中得到的结果。

214765115
214745521
214749449
214749304
214747088
214733986
214745858
214743477
214760340
214743509

最佳答案

bias 会随着模值的增加而变大,随着最大随机数的增加而变小。在这种情况下,10 与最大随机数相比非常小,因此偏差几乎无法估量。

如果您想看到更好的示例,请使用更少的随机数返回位。

int random_value = random() & 0xfff;
array[random_value % 10]++;

关于c++ - 带模数的随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com