c++ 为什么在CPP中,某些系统的兰德_MAX设置为32K,而在其他系统中设置为2147483647

xdnvmnnf  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(89)

在我的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

5ktev3wc

5ktev3wc1#

是的。不要使用rand()。不使用rand()的原因有很多,尤其是它是有史以来最糟糕的两个随机数生成器之一。(另一个是RANDU。)永远不要使用rand()
在你的系统上查找random()arc4random()。如果你没有找到,那么使用PCG源代码here

xmjla07d

xmjla07d2#

rand()是一个非常古老的函数,可以追溯到C语言的早期。在早期,32k的INT_MAX是很常见的,并且是合理的。当然,很容易看出RAND_MAX > INT_MAX没有任何意义。
至于为什么有些编译器在这几年里更新了RAND_MAX,而有些没有,我猜这是因为对向后兼容性的承诺。我知道我个人一直被微软编译器的32k限制所困扰。但是微软一直是向后兼容性的拥护者,所以我原谅他们这一点。
自从C++11以来,有很多新的random number functions被引入。它们在几乎所有方面都比旧的rand()好,除了易用性。

相关问题