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
Random double between min and max
提问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_MAX
returns a random number between0
and1
(max - min) * ( (double)rand() / (double)RAND_MAX )
returns a random number between0
andmax - min
.- the whole expression will return a random number between
0 + min
andmin + (max-min)
- i.e.min
andmax
.
(double)rand() / (double)RAND_MAX
返回一个介于0
和之间的随机数1
(max - min) * ( (double)rand() / (double)RAND_MAX )
返回0
和之间的随机数max - min
。- 整个表达式将返回一个介于
0 + min
and之间的随机数min + (max-min)
- 即min
andmax
。
回答by user2514807
You can use this for generating random double or floating numbers:
您可以使用它来生成随机双精度或浮点数:
((double) rand()*(max-min)/(double)RAND_MAX-min);