【发布时间】:2014-02-02 14:03:26
【问题描述】:
我今天听说 C 中的 random 函数不是生成随机数的好方法。有人告诉我,可以预测产生的价值。
我问是因为我听到了一些有趣的事情:
- 听说这个数字是根据CPU的时钟生成的
- 如果第一个为真,那么是否可以预测随机值?
- rand 函数是如何工作的,为什么不好?
- 嵌套在 C/C++ 中的其他编程语言的随机函数是否存在相同问题?
基本上,如果您有输入参数,您将获得相同的结果。 我还听说 C 中的 rand 函数不返回随机值,而是返回伪随机值。这是什么意思?
【问题讨论】:
-
rand不是基于 CPU 的时钟。 -
另外,您在发布此内容之前是否进行了任何研究?例如阅读en.wikipedia.org/wiki/Pseudorandom?
-
在 C++(准确地说是 C++11)中,您可以使用
std::random_device,它依赖于操作系统熵池来产生强(即“不可预测”)随机数。但是,除非您的 PC 上附加了熵的物理源(即“随机性”),否则您获得的“随机”数始终是可以重现的计算结果,因此称为“伪随机”。这种计算可能非常难以重现,甚至在物理上无法重现,但它并不是真正意义上的“随机”。 -
不幸的是,鉴于 OP 的“来自其他编程语言的函数......有相同的问题”问题,这个答案作为 2010 年问题的副本被关闭。 C++11 已经提出了这个问题,并且在“重复”帖子中没有表示。