2013-05-07 22 views
3

我想動態分配一個雙精度數組,並將每個元素設置爲正數或負數範圍內的一個隨機值,但我有困難。如何將rand()結果設置爲一定範圍內的值,包括負值?

現在,我只能弄清楚如何設置數字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; 

回答

4

範圍應該是(最大值 - 最小值),並且可以預先計算倍增因數除以由RAND_MAX提供。

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

假設蘭特()返回一個浮點數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

太好了!

相關問題