我正在尝试动态分配一个双精度数组,并将每个元素设置为正数或负数范围内的随机值,但我遇到了困难。
现在,我只能弄清楚如何设置数字0 - 最大。
这是我到目前为止所做的:
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;
答案 0 :(得分:4)
范围应为(最大 - 最小),您可以预先计算乘以RAND_MAX的倍增系数。
double factor = (max - min) / RAND_MAX;
for (int i = 0; i < size; i++)
array0[i] = (rand() * factor) + min;
答案 1 :(得分:1)
假设rand()返回浮点数0&lt; = x&lt; 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
大!