【问题标题】:Random double between min and max最小值和最大值之间的随机双精度
【发布时间】:2012-05-27 17:57:41
【问题描述】:
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 之间。

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

【问题讨论】:

标签: c++ random


【解决方案1】:

公式不应该是

(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

【讨论】:

  • 作为警告:此方法可能会在您选择的范围内生成一小部分可能的随机数,远低于 1%。使用<random>(如果可用)获得更高质量的随机双打。
【解决方案2】:

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

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

【讨论】:

  • 与公认的答案相比,这有什么特别的优势吗?你能解释更多吗?
  • 我同意@jogojapan,最后的-min 是与+min 接受的答案的唯一区别(据我所知),因此这个答案是错误的。
猜你喜欢
  • 1970-01-01
  • 2011-02-09
  • 2017-09-07
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 2019-01-14
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多