2012-05-27 41 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'接受的答案唯一的区别(据我所知),因此这个答案是错误的。 –

相关问题