做这个的最好方式是什么?我的编译器显示 RAND_MAX = 32,767。所以我很好奇如何获得 0 到 100,000 之间的统一随机生成值?
问问题
3785 次
5 回答
10
我将把 juanchopanza 的评论作为答案。
<random>
如果您的编译器提供标头 (C++11),请使用标头。
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 10000);
std::cout << dis(gen) << std::endl;
于 2013-11-03T22:12:19.970 回答
1
我很久以前在某个网站上发现了以下功能。作者声称函数提供了良好的一致性。
#define RS_SCALE (1.0 / (1.0 + RAND_MAX))
double drand(void)
{
double d;
do {
d = (((rand () * RS_SCALE) + rand ()) * RS_SCALE + rand ()) * RS_SCALE;
} while (d >= 1); /* Round off */
return(d);
}
正如下面的评论中所指出的,这给出了 0..1 范围内的答案,所以你必须乘以 100000,即drand()*100000
.
于 2013-11-03T22:08:38.747 回答
1
那时您可能应该下载并使用一个严肃的 PRNG,例如Gnu Scientific Library中可用的那些。
于 2013-11-03T22:13:08.753 回答
-1
我的发现是首先#include <time.h>
,然后你可以写srand(time(NULL));
一个值到随机函数中。那么你所要做的就是使用这一行:(rand() % 99999 + 1);
. 这应该会给你一个介于 0 到 100,000 之间的随机值。如果需要,您还可以将其分配给变量:int myVar = (rand() % 99999 + 1);
. 希望有帮助!(而且我希望我是完全正确的。我还在获得 CS 学位并仍在学习 C++,但我之前已经这样做了,并且成功了。)
于 2017-09-18T23:04:37.740 回答
-3
这是您的代码:
100000.0f * ((float)rand() / 32767.0f)
这将产生从 0 到 100000 的随机浮点数,但您可以在此处使用 100000 以外的任何正数。
更新:
确实(感谢psj下面的评论)我已经意识到上面覆盖了 0..100000 范围的 ~1/3。
于 2013-11-03T22:12:33.800 回答