gpt4 book ai didi

c++ - rand() 给出序列号,即使在我的 Mac 上播种时也是如此

转载 作者:行者123 更新时间:2023-11-28 06:19:29 25 4
gpt4 key购买 nike

这最近才开始发生。我注意到我的一个程序没有给出随机数,所以我制作了一个快速简单的随机数程序来测试它:

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
srand(time(NULL))
std::cout << rand() << std::endl;
return 0;
}

即使在播种时,它也会一直给出相同的随机数,只是在每次调用后增加一点。这是程序运行几次后的一些数字:874692194、874709001、874725808、874742615。

我把这个程序放在我的一台 Linux 机器上只是为了确定,正如预期的那样,它正确地产生了随机数。

那么为什么我的 Mac 不生成随机数?我已经尝试重新启动计算机,但问题仍然存在。

在有人说“为什么不使用 C++ 的随机库?”之前,我们不允许在这个 Computing 类中使用 C++11 功能,所以这不是解决方案。

最佳答案

像 rand() 这样的简单 PRNG 旨在生成一个数字序列,当作为一个序列进行分析时,这些数字是随机且均匀分布的。

如果您在播种后仅从 PRNG 生成一个数字,那么第一个数字实际上只是种子的哈希值,许多 PRNG 的种子哈希函数非常糟糕。

您可以改进种子,例如,将其作为时间的 MD5 散列加上进程 ID(以及您可能拥有的其他一些熵)。但是,您可以将其用作您的单个随机数,而根本不需要 PRNG。

关于c++ - rand() 给出序列号,即使在我的 Mac 上播种时也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566635/

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