gpt4 book ai didi

C++ rand 和 srand 在不同的机器上得到不同的输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:02 26 4
gpt4 key购买 nike

我想生成一个随机整数,所以我使用了 C++ rand(void) 和 srand(int) 函数:

int main(){
srand(1);
cout << rand() << endl;
return 0;
}

好的,它符合我的需要。每次我执行它都会得到相同的结果,我喜欢它!
但有一个问题。当我在我的计算机上执行它时,我得到 16807 作为输出。但是当我在另一台机器上执行时,我得到了 1804289383。

我知道 rand() 和 srand(int) 有一个与此类似的简单实现:

static unsigned long int next = 1;

int rand(void) // RAND_MAX assumed to be 32767
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}

void srand(unsigned int seed)
{
next = seed;
}

那为什么呢? rand() 是否有可能在多台机器上有不同的实现?我该怎么办?

我想修改另一台机器,以便我也从那台机器上获得 16807。
请注意,我喜欢我电脑上的 rand 实现。请告诉我一种其他机器与我的机器获得相同结果的方法。

提前致谢。

最佳答案

是的,rand()有不同的实现;没有要求它们必须相同。

如果您希望跨实现和平台的顺序一致,您可以从 the C standard 复制示例实现第 7.20.2 节。一定要重命名 randsrand所以它们不会与标准库的版本冲突。您可能需要调整代码,使类型在实现中具有相同的大小和范围(例如,使用 uint32_t 来自 <stdint.h> 而不是 unsigned int)。

编辑:鉴于评论中的新信息,看起来要求与我们的想法不同(我仍然不是 100% 清楚它们是什么)。

您想在两个系统上生成与您在一个系统上生成的存储文件一致的随机数,但由于网络问题无法将其传输到另一个系统(文件大约为 1 GB)。 (将其刻录到 DVD,或将其拆分并刻录到 2 张 CD,不是一种选择吗?)

建议的解决方案:

编写一个自定义生成器,在两个系统上生成一致的结果(即使它们与您之前得到的结果不同)。完成后,使用它在两个系统上 重新生成一个新的 1 GB 数据文件。现有文件变得不必要,您不需要传输大量数据。

关于C++ rand 和 srand 在不同的机器上得到不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115459/

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