在我的CPP系统中,每当我使用rand()生成一个随机数时,我总是得到一个0- 32 k之间的值,而在一些在线视频和代码中,它生成一个0-INT_MAX之间的值。我知道它依赖于RAND_MAX。所以它有一些方法来改变这个值,使生成的随机数的范围为0-INT_MAX提前感谢帮助:)
#include<bits/stdc++.h>
using namespace std;
int main(){
srand(time(NULL));
for(int i=1;i<=10;i++){
cout << rand() << endl;
}
}
我使用了此代码,生成的随机数为5594 27457 5076 5621 31096 14572 1415 25601 3110 22442
而同样的代码在在线编译器上给出928364519 654230200 161024542 1580424748 35757021 1053491036 1968560769 1149314029 524600584 2043083516
2条答案
按热度按时间5ktev3wc1#
是的。不要使用
rand()
。不使用rand()
的原因有很多,尤其是它是有史以来最糟糕的两个随机数生成器之一。(另一个是RANDU。)永远不要使用rand()
。在你的系统上查找
random()
和arc4random()
。如果你没有找到,那么使用PCG源代码here。xmjla07d2#
rand()
是一个非常古老的函数,可以追溯到C语言的早期。在早期,32k的INT_MAX
是很常见的,并且是合理的。当然,很容易看出RAND_MAX > INT_MAX
没有任何意义。至于为什么有些编译器在这几年里更新了
RAND_MAX
,而有些没有,我猜这是因为对向后兼容性的承诺。我知道我个人一直被微软编译器的32k限制所困扰。但是微软一直是向后兼容性的拥护者,所以我原谅他们这一点。自从C++11以来,有很多新的random number functions被引入。它们在几乎所有方面都比旧的
rand()
好,除了易用性。