gpt4 book ai didi

c++ - 生成一个小于 4 位的随机数,但它具有 1、2 或 3 位的概率相等

转载 作者:IT老高 更新时间:2023-10-28 21:59:34 24 4
gpt4 key购买 nike

我目前正在使用 1 + (int)(rand() * 999.0/RAND_MAX) 生成介于 1 和 999 之间的随机数,但不会出现两位数和一位数和三位数字一样频繁。

我该如何解决这个问题?

请注意,虽然原始代码给出的范围是 0 到 999(含),但我实际上想要的范围是 1 到 999(含)。

最佳答案

您观察到一位数字不像两位和三位数字那样频繁出现,这并不奇怪。

一位数只有9个(不包括零),但两位数有90个,三位数有900个。因此,一个统一的随机数生成器会以该频率绘制数字。

要生成 [1, 999] 范围内的随机数,使它们具有 1、2 和 3 位数字的概率相等,请使用您喜欢的生成器生成随机数 p,比如说,在 [0, 1) 范围内(请参阅 C++ 中的新随机库函数),并使用 std::pow(1000, p); 对其进行转换。

你应该注意,得到的分布不会是分段均匀的:也就是说,抽到一定位数的数字的概率和抽到的概率是不一样的具有该位数的任何其他数字。但它确实有一个连续且可微的累积密度函数,这在数学上可能很重要。

(对于数学倾向,我正在应用的转换是 OP 需要的分布的 quantile 函数)。

关于c++ - 生成一个小于 4 位的随机数,但它具有 1、2 或 3 位的概率相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073369/

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