C ++生成0到100,000之间的随机数

时间:2013-11-03 22:00:23

标签: c++ random g++ solaris

这样做的最佳方式是什么?我的编译器显示RAND_MAX = 32,767。所以我很好奇如何获得0到100,000之间的均匀随机生成值?

5 个答案:

答案 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。