3

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

现在,我只能弄清楚如何设置数字 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;
4

2 回答 2

4

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

double factor = (max - min) / RAND_MAX;
for (int i = 0; i < size; i++)
    array0[i] = (rand() * factor) + min;
于 2013-05-07T02:06:45.070 回答
1

假设 rand() 返回浮点数 0<=x<1,您只需按所需数字的范围进行缩放,然后添加最小值。

示例:我们想要从 -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

伟大的!

于 2013-05-07T02:09:47.160 回答