最小和最大之间的随机双倍

Dav*_*mes 5 c++ random

double get_random(double min, double max) {
  /* Returns a random double between min and max */

  return min * ((double) rand() / (double) RAND_MAX) - max;
}
Run Code Online (Sandbox Code Playgroud)

这是我在最小和最大之间产生随机双打的功能.但是,当我打电话时get_random(-1.0, 1.0);,我得到-2.0和-1.0之间的值.

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

Luc*_*ore 18

不应该是公式

(max - min) * ( (double)rand() / (double)RAND_MAX ) + min
Run Code Online (Sandbox Code Playgroud)
  • (double)rand() / (double)RAND_MAX返回0和之间的随机数1
  • (max - min) * ( (double)rand() / (double)RAND_MAX )返回0和之间的随机数max - min.
  • 整个表达式将在0 + min和之间返回一个随机数min + (max-min)- 即minmax.

  • 正如警告:这种方法可能会产生一小部分,远低于所选范围内可能的随机数的1%.使用`<random>`(如果可用)获得更高质量的随机双打. (2认同)