此代码应该生成 1 到 10 之间的随机数,但它每次都返回 1。
int random_integer;
int lowest=1, highest=10;
int range=(highest-lowest)+1;
random_integer = lowest + int(range*rand()/(RAND_MAX + 1.0));
cout << random_integer << endl;
代码有什么问题?
如果你想要一个介于lowest
和之间的随机整数highest
,你最好写
random_integer = lowest + rand() % range
你会在这里溢出 - range*rand()
。
只需使用普通人使用的东西:rand() % 10 + 1
.
range * rand() / (RAND_MAX + 1.0)
不按你的想法做。介绍一些括号:
range * (rand() / (RAND_MAX + 1.0))
(请注意,这种方法会产生偏态分布。)
我同意上面提供的所有解决方案。
现在要在每次运行程序时获得不同的序列,您可以使用srand()函数,它将为 rand()函数提供种子,如下所示:-
srand(time(NULL))
random_integer = lowest + rand() % range
这两个一直是我节目的一部分
float randf(float lo, float hi) {
float random = ((float) rand()) / (float) RAND_MAX;
float diff = hi - lo;
float r = random * diff;
return lo + r;
}
int randi(int lo, int hi)
{
int n = hi - lo + 1;
int i = rand() % n;
if (i < 0) i = -i;
return lo + i;
}
您似乎假设rand()
返回一个介于 0 和 1 之间的值。
这是不正确的,它返回的值介于 0 和RAND_MAX
.