srand()和rand()倾向于产生负数

时间:2013-09-03 10:57:38

标签: c++ random

我写了这个函数来产生一定范围内的随机数。我注意到当我包含负范围时,它似乎会产生更多的负数。例如-5到5

我假设这不是随机的。这段代码有问题吗?

int random_number_generator(int lowest, int highest)
{
    srand((unsigned)time(0));
    int random_integer;
    random_integer = lowest+(rand()%highest);
    cout << random_integer << endl;
}

3 个答案:

答案 0 :(得分:4)

所需范围最高 - 最低,因此您需要编写如下表达式:

random_integer = lowest+(rand()%(highest-lowest));

答案 1 :(得分:0)

您可以使用此代码:

int srandInit = 0;
float Random(float min, float max)
{
    if (srandInit == 0) 
    {
        srand ( (unsigned)time(NULL) );
        srandInit = 1;
    }
    return ((max - min) * ((float)rand() / (float)RAND_MAX)) + min;
}

只需将static_cast结果float生成int

答案 2 :(得分:0)

下一个表达式的结果是[最低......最高]区间内的兰特数

random_integer = lowest + ( rand( ) % (highest-lowest + 1) );