C++ 最小值和最大值之间的随机双倍

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10776073/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-27 14:26:52  来源:igfitidea点击:

Random double between min and max

c++random

提问by David Gomes

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

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

That's my function to generate random doubles between a min and a max. However, when I call get_random(-1.0, 1.0);, I get values between -2.0 and -1.0.

这是我在最小值和最大值之间生成随机双打的功能。但是,当我调用 时get_random(-1.0, 1.0);,我得到的值介于 -2.0 和 -1.0 之间。

Any idea of what I'm doing wrong and how I can fix it?

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

回答by Luchian Grigore

Shouldn't the formula be

公式不应该是

(max - min) * ( (double)rand() / (double)RAND_MAX ) + min
  • (double)rand() / (double)RAND_MAXreturns a random number between 0and 1
  • (max - min) * ( (double)rand() / (double)RAND_MAX )returns a random number between 0and max - min.
  • the whole expression will return a random number between 0 + minand min + (max-min)- i.e. minand max.
  • (double)rand() / (double)RAND_MAX返回一个介于0和之间的随机数1
  • (max - min) * ( (double)rand() / (double)RAND_MAX )返回0和之间的随机数max - min
  • 整个表达式将返回一个介于0 + minand之间的随机数min + (max-min)- 即minand max

回答by user2514807

You can use this for generating random double or floating numbers:

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

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