这样做的最佳方式是什么?我的编译器显示RAND_MAX = 32,767。所以我很好奇如何获得0到100,000之间的均匀随机生成值?
答案 0 :(得分: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;
答案 1 :(得分: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
。
答案 2 :(得分:1)
您应该下载并使用严重的PRNG,例如Gnu Scientific Library中提供的PRNG。
答案 3 :(得分:0)
我是如何找到的,首先是#include <time.h>
,然后你可以编写srand(time(NULL));
来为随机函数赋值。然后你所要做的就是使用这一行:(rand() % 99999 + 1);
。这应该给你一个0到100,000之间的随机值。如果需要,您还可以将其分配给变量:int myVar = (rand() % 99999 + 1);
。希望有所帮助! (而且我希望我完全正确。我仍然获得了CS学位并且仍在学习C ++,但我之前已经完成了这项工作并且它已经完成了。)
答案 4 :(得分:-3)
这是你的代码:
100000.0f * ((float)rand() / 32767.0f)
这将产生从0到100000的随机浮点数,但你可以在这里使用100000以外的任何正数。
<强>更新强>
确实(感谢下面的 psj 的评论)我已经意识到上面涵盖了0..100000范围内的1/3。