gpt4 book ai didi

创建一个小于最大给定值的随机数

转载 作者:行者123 更新时间:2023-12-02 15:00:28 24 4
gpt4 key购买 nike

我想做的是创建一个函数,该函数接受一个参数,该参数是随机生成应创建的数字的限制。我经历过一些生成器只是一遍又一遍地重复生成的数字。

如何制作一个不连续返回相同数字的生成器。有人可以帮助我实现我的目标吗?

int randomGen(int max)
{
int n;
return n;
}

最佳答案

rand 获取均匀分布结果的最简单方法是这样的:

int limited_rand(int limit)
{
int r, d = RAND_MAX / limit;
limit *= d;
do { r = rand(); } while (r >= limit);
return r / d;
}

结果将在 0 范围内至limit-1 ,并且只要值 0 ,每个都会以相同的概率出现。通过RAND_MAX全部与原始 rand 具有相同的概率功能。

我使用的其他方法,例如模算术或不带循环的除法,都会引入偏差。通过浮点中间体的方法不能避免这个问题。从 rand 获取良好的随机 float 至少同样困难。如果您想要随机 float ,那么使用我的整数函数(或其改进)是一个很好的起点。

编辑:这是我对偏见含义的解释。假设RAND_MAX是 7 和 limit是 5。假设(如果这是一个好的 rand 函数)输出 0、1、2、...、7 的可能性都是相等的。服用rand()%5会将 0、1、2、3 和 4 映射到自身,但将 5、6 和 7 映射到 0、1 和 2。这意味着值 0、1 和 2 弹出的可能性是值 3 和 4。如果您尝试重新缩放和划分(例如使用 rand()*(double)limit/(RAND_MAX+1)),会发生类似的现象。这里,0和1映射到0,2和3映射到1,4映射到2,5和6映射到3,7映射到4。

RAND_MAX 的大小在一定程度上减轻了这些影响。 ,但如果limit,他们可以回来很大。顺便说一句,正如其他人所说,对于线性同余 PRNG(rand 的典型实现),低位往往表现得非常糟糕,因此当 limit 时使用模算术。是 2 的幂可以避免我描述的偏差问题(因为在这种情况下 limit 通常可以均匀地划分 RAND_MAX+1),但是您会遇到不同的问题。

关于创建一个小于最大给定值的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3746814/

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