随机数范围,不包括0

时间:2015-07-01 14:16:20

标签: c

我有以下函数生成介于-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被排除在随机选择的数字范围之外?

1 个答案:

答案 0 :(得分:8)

无论你做什么,如果返回的值为0,重绘:这将在结果中引入统计偏差。

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

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

(简单地说 - 因为这个评论更多地用于数学网站 - 并且将参数限制为线性同余生成器,如果省略生成的值,往往会发生的事情是增加所得分布的方差,使其不再均匀先前绘制的小数字将与后续绘图线性相关,因为生成器的模数将不起作用。如果丢弃图纸并且那么相邻图纸的自相关 - 这对于所得到的分布是均匀的 - 将是缩减的。 会增加样本差异。)