gpt4 book ai didi

c++ - 生成随机 64 位整数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:35 25 4
gpt4 key购买 nike

我需要你的帮助,请给我一些建议。从编程方面我知道要生成随机的 30 位整数,我们应该这样写:

RAND_MAX*rand()+rand()

但是我该怎么做才能生成不是 30 位而是 64 位的随机整数呢?我认为如果我将两个 30 位整数相乘然后再乘以 4 位整数是非常低效的方法,那么我应该使用什么样的方法?我现在正在使用 popcount_1 64 位的不同方法,我想在随机整数上测试它(我也在测量每个人完成任务所花费的时间)

最佳答案

首先,我对您发布的 30 位解决方案表示怀疑整数。 RAND_MAX 本身可以是一个 31 位值,而 RAND_MAX *
rand() + rand()
可能会溢出,产生未定义的行为(实际上是负值)。

如果您需要的值大于 RAND_MAX 的保证最小值,或者就此而言,任何不明显小于RAND_MAX,唯一的解决方案是连续调用rand(),并组合这些值,但您需要小心地执行此操作,并且验证结果。 (rand() 的大多数实现使用线性全等生成器,虽然对某些任务来说足够了,但不是在这种情况下特别好。)无论如何,就像:

unsigned 
rand256()
{
static unsigned const limit = RAND_MAX - RAND_MAX % 256;
unsigned result = rand();
while ( result >= limit ) {
result = rand();
}
return result % 256;
}

unsigned long long
rand64bits()
{
unsigned long long results = 0ULL;
for ( int count = 8; count > 0; -- count ) {
results = 256U * results + rand256();
}
return results;
}

(rand256 中的代码旨在消除 otherwise将 RAND_MAX 值映射到 256 个值时不可避免的偏差。)

关于c++ - 生成随机 64 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8120062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com