gpt4 book ai didi

c - 随机数范围,排除0

转载 作者:太空狗 更新时间:2023-10-29 15:21:44 25 4
gpt4 key购买 nike

我有以下函数生成一个介于 -10 和 2 之间的随机数:

#include <stdlib.h>
#include <time.h>

static int
getRandomReturnCode(void)
{
int N = 2,
M = -10;

srand(time(NULL));

r = M + rand() / (RAND_MAX / (N - M + 1) + 1);

if (r == 0){
getRandomReturnCode();
}

return r;
}

目前,如果返回代码 0(成功),它将递归调用该函数,直到遇到非零返回代码并返回。我可以做些什么来改进我的代码,使 0 被排除在随机选择的数字范围之外?

最佳答案

无论您做什么,如果返回值为 0,不要重绘:这会在结果中引入统计偏差。

这里最好的做法是在 -10 和 1 之间绘制并向任何非负输出加 1。

最后,调用 srand 一次,否则你会破坏生成器的统计属性。

(简而言之 - 因为这个评论更多的是针对数学网站 - 并且将参数限制为线性同余生成器,如果你省略生成的值,往往会发生的是你增加了结果分布的方差,因此它不再均匀. 先前绘制的小数字将与后续绘图线性相关,因为生成器的模数将不起作用。这种自相关 - 使结果分布均匀所必需 - 如果绘图被丢弃并且 增加样本方差。)

关于c - 随机数范围,排除0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31163900/

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