如何允许库中的 rand() <cstdlib> 生成超过 32767 的数字?



因为有时我想要rand ()生成超过32767的数字。是否有一种方法可以扩展rand()的极限,从而为我的程序生成一个更大的随机数?一个例子:

#include <cstdlib>
using namespace std;

int main() {
srand(9439);
for(int i = 0; i < 15; i++){
cout << 1 + (rand() % 500000) << endl;
}

}

所以,结果不会超过32767。是否有办法让rand()生成超过32767的随机数?

rand()是一个C标准库函数,它返回一个介于0RAND_MAX之间的整数,至少32767,但可以变化。这取决于实施。我已经测试了你的代码,它的工作方式和你期望的一样。所以,在这种情况下,它可能与您的机器有关。

另外,正如一些人已经指出的,在c++中,你通常最好使用而不是使用C的rand()srand(),因为它们比较起来相当原始。

如果你必须使用rand(),那么你可以调用它两次,并将两个32位的数字连接成一个64位的数字。

我的C生锈了,所以这是一个类似C的伪代码:

int64 bigRand;
int32 loHalf;
int32 hiHalf;
loHalf = rand();
hiHalf = rand();
bigRand = hiHalf;
bigRand = bigRand << 32;  // bit shift left.
bigRand = bigRand + loHalf;  // Fill in lower bits.

这使得bigRand作为一个64位伪随机数具有原始rand()的所有错误。

最新更新