6
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 之间。

知道我做错了什么以及如何解决它吗?

4

2 回答 2

21

公式不应该是

(max - min) * ( (double)rand() / (double)RAND_MAX ) + min
  • (double)rand() / (double)RAND_MAX0返回一个介于和之间的随机数1
  • (max - min) * ( (double)rand() / (double)RAND_MAX )0返回和之间的随机数max - min
  • 整个表达式将返回一个介于0 + minand之间的随机数min + (max-min)- 即minand max
于 2012-05-27T18:01:50.387 回答
1

您可以使用它来生成随机双精度数或浮点数:

((double) rand()*(max-min)/(double)RAND_MAX-min);
于 2013-06-24T03:05:22.983 回答