为什么 Java Math.random() 不是“真正的”随机数?它是如何工作的?[关闭]

Why is Java Math.random() not a "real" random? How does it work? [closed]

提问人:Szyxth 提问时间:11/16/2023 更新时间:11/16/2023 访问量:81

问:


想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。

4天前关闭。

我正在尝试理解 java 的 Math.random() 方法。我听说过“伪随机”这个术语被抛来抛去,并且使用一种算法来生成它。但是,我不太明白这个算法是如何工作的。

这是否意味着可以预测每个 Math.random() 值?

java 随机

评论

8赞 Basil Bourque 11/16/2023
在此发布之前,请阅读维基百科
2赞 Slaw 11/16/2023
是的,伪随机数生成器是确定性的。是否可以预测值取决于你是否知道种子值,或者,如果你不知道种子值,则取决于算法的“加密安全性”程度。有关详细信息,请参阅 en.wikipedia.org/wiki/Pseudorandom_number_generator
0赞 Thomas Kläger 11/16/2023
是的,根据 stackoverflow.com/questions/8936891/,通常读取两个连续的伪随机 int 值来计算当前种子并从中计算出以下所有数字就足够了。
2赞 Old Dog Programmer 11/16/2023
生成“真”随机数需要能够做到这一点的硬件。计算机被设计为可预测的、可靠的、一致的。因此,可以生成随机数的电路通常不会被设计到计算机中。如果你需要真正的随机数生成,你可以购买硬件来做到这一点。也许对真随机数的需求会增加到足够多,所以有一天,计算机会将其作为标准功能。
1赞 Maarten Bodewes 11/16/2023
为了 Pete 的缘故,您只需要阅读 Random 类的 JavaDoc 的前两行。如果您想要不可预测的随机值,请使用 - 与其他库 (kuch .NET kuch 相比),它实现了 ,谢天谢地。SecureRandomRandom

答: 暂无答案