Ben*_*ier 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]
Run Code Online (Sandbox Code Playgroud)
不要忘记为发电机正确播种.
上面我暗示这rand不是一个"适当的"伪RNG,因为它通常带来许多缺点.在最好的情况下,它缺乏抽象,因此从不同的分布中挑选变得困难且容易出错(在网上搜索例如"随机范围模数").替换用于生成随机数的底层引擎也是不可能的AFAIK设计.在不太理想的情况下rand,伪RNG不能为许多/大多数用例提供足够长的序列长度.使用TR1/C++ 11生成高质量的随机数很容易总是使用正确的解决方案,因此当出现模糊的错误时,不需要首先担心使用的伪RNG的质量.微软'
// 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;
Run Code Online (Sandbox Code Playgroud)
您可能需要使用大于 long int 的值,range并且number如果(100000 + range)将超过其最大值。