我有以下函数生成一个介于 -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/