【问题标题】:How to set rand() result to values in a certain range including negatives?如何将 rand() 结果设置为一定范围内的值,包括负数?
【发布时间】:2013-04-30 21:08:21
【问题描述】:

我正在尝试动态分配一个双精度数组并将每个元素设置为正数或负数范围内的随机值,但我遇到了困难。

现在,我只能弄清楚如何设置数字 0 - max。

这是我目前所拥有的:

double *random_arr(int size, double min, double max) {
    double *array0 = calloc(size, sizeof(double));
    if (array0 == NULL) {
            exit(1);
    }
    for (int i = 0; i < size; i++)
            array0[i] = (max * rand() / RAND_MAX);
    return array0;
}

我的最佳猜测:

for (int i = 0; i < size; i++)
    array0[i]=((max + min) * rand() / RAND_MAX) - min;

【问题讨论】:

    标签: c random max min


    【解决方案1】:

    范围应该是 (max - min),您可以预先计算一个乘法因子除以 RAND_MAX。

    double factor = (max - min) / RAND_MAX;
    for (int i = 0; i < size; i++)
        array0[i] = (rand() * factor) + min;
    

    【讨论】:

      【解决方案2】:

      假设 rand() 返回浮点数 0

      示例:我们想要从 -100 到 -10 的数字

      您的范围是您的最大值 - 最小值,即 -10 - (-100) = 90

      假设你的随机数是 0.5

      0.5 * 90 + -100(您的最小值)= -55

      让我们检查边缘情况:

      随机数 = 0.0

      0.0 * 90 + -100 = -100

      随机数 = 0.9999999999...

      0.99999999... * 90 + -100 = -10

      太棒了!

      【讨论】:

        猜你喜欢
        • 2021-12-13
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多