2012-05-27 186 views
3
double get_random(double min, double max) { 
    /* Returns a random double between min and max */ 

    return min * ((double) rand()/(double) RAND_MAX) - max; 
} 

這是我的函數,用於在分鐘和最大值之間生成隨機雙打。但是,當我撥打get_random(-1.0, 1.0);時,我的值介於-2.0和-1.0之間。最小值和最大值之間的隨機雙倍數

任何想法,我做錯了什麼,我該如何解決它?

+3

(蘭特/ RAND_MAX)生成0.0和1.0之間的數字。所以把這兩個極端置於等式的其餘部分,你應該明白爲什麼它不起作用。 –

+0

請參閱:http://stackoverflow.com/questions/686353/c-random-float –

回答

15

不應式是

(max - min) * ((double)rand()/(double)RAND_MAX) + min 
  • (double)rand()/(double)RAND_MAX返回一個隨機數01之間
  • (max - min) * ((double)rand()/(double)RAND_MAX)返回0max - min之間的隨機數。
  • 整個表達式將返回0 + minmin + (max-min)之間的隨機數 - 即minmax
+2

正如警告:此方法可能會在您選擇的範圍內產生一小部分,低於1%的可能隨機數。使用''(如果可用)獲得更高質量的隨機雙打。 –

1

可以使用該用於產生隨機雙或浮點數:

((double) rand()*(max-min)/(double)RAND_MAX-min); 
+0

與接受的答案相比,這有什麼特別的優勢嗎?你能解釋更多嗎? – jogojapan

+2

我同意@jogojapan,最後的'-min'是與'+ min'接受的答案唯一的區別(據我所知),因此這個答案是錯誤的。 –

相關問題