c - 随机数范围,排除0

标签 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 被排除在随机选择的数字范围之外?

最佳答案

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

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

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

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

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

相关文章:

c - C语言中的滚动文本

c - C中的二进制搜索树程序表现异常

c - 程序间歇性地坚持 main 报告不同的线程 id 而不是线程本身

我可以通过 C 套接字发送 json 数据吗?

c - C中fgets函数的字符串长度

c++ - 为什么 ShellExecute 找不到文件?

c - 简单的 C 代码片段

C二维数组输入工作,但输出给出了其他的东西

c - 从函数返回结构体的动态数组

将 char 转换为 int 无效