随机数大于100,000

时间:2012-11-21 23:22:54

标签: c++ c random numbers

我正在用C / C ++编写,我想创建大量超过100,000的随机数。我该怎么做?使用rand();

4 个答案:

答案 0 :(得分:15)

您不会使用rand执行此操作,但使用较新的C ++附带的适当的随机数生成器,请参阅例如cppreference.com

const int min = 100000;
const int max = 1000000;
std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(min,max);
int random_int = distribution(generator);  // generate random int flat in [min, max]

不要忘记为发电机正确播种。

上面我暗示rand不是“正确的”伪RNG,因为它通常带有许多缺点。在最好的情况下,它缺乏抽象,因此从不同的分布中挑选变得困难且容易出错(在网上搜索例如“随机范围模数”)。替换用于生成随机数的底层引擎也是不可能的AFAIK设计。在不太理想的情况下,作为伪RNG的rand不能为许多/大多数用例提供足够长的序列长度。使用TR1 / C ++ 11生成高质量的随机数很容易总是使用正确的解决方案,因此当出现模糊的错误时,不需要首先担心使用的伪RNG的质量。微软的STL做了一个演讲,在GoingNative2013上给出了一个很好的summary talk主题。

答案 1 :(得分:2)

// Initialize rand()'s sequence. A typical seed value is the return value of time()
srand(someSeedValue);

//...

long range = 150000; // 100000 + range is the maximum value you allow
long number = 100000 + (rand() * range) / RAND_MAX;

如果range超过其最大值,则number(100000 + range)可能需要使用大于long int的内容。

答案 2 :(得分:2)

通常,您可以使用介于0和1之间的随机数生成器,并通过执行以下转换获得您想要的任何范围:

x' = r x + b

因此,如果您想要介于100,000和300,000之间的随机数,x是0到1之间的随机数,那么您将r设置为200,000和{{1} }为100,000,b将在您想要的范围内。

答案 3 :(得分:1)

如果您还没有访问C ++内置函数,Boost在Boost.Random中有一堆真正的随机函数,包括specific solutions表示您明显的问题空间。

我赞同这些评论,澄清你的问题中的编辑将提高答案的准确性,例如。 “我需要从100,001到1,000,000的均匀分布的整数。”