gpt4 book ai didi

c++ - 这会根据这些概率给我适当的随机数吗? C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:39 25 4
gpt4 key购买 nike

代码:

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/72:1/73:2/74:2/75: 1/7

这段代码会给我正确的结果吗? IE。如果这是无限次运行,我会得到正确的频率吗?有没有更短的方法来做到这一点?

最佳答案

不,由于 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

请注意 0-3 比 4-6 更常见;这是您的随机数生成中的偏差。 (你也加 1,但这只是将它移过来)。

RAND_MAX 当然不是 10,但也可能不是 7 的倍数(负 1)。很可能是二的幂。所以你会有一些偏见。

我建议使用 Boost Random Number Library它可以为您提供一个随机数生成器,该生成器可以无偏差地产生 1-7。另请参阅 bames53's answer using C++11 ,如果您的代码只需要面向 C++11 平台,这是执行此操作的正确方法。

关于c++ - 这会根据这些概率给我适当的随机数吗? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8316735/

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