【发布时间】:2013-02-04 08:12:47
【问题描述】:
尽管标题很奇怪,但我想问一个合理的问题:哪个方法生成的数字更随机:Java 的 Random() 类或 Math.random(),还是 C++ 的 rand()?
我听说 PHP 的 rand() 很糟糕,也就是说,如果你映射它的结果,你可以清楚地看到一个模式;遗憾的是,我不知道如何用 C++ 或 Java 绘制地图。
另外,只是出于兴趣,C# 呢?
【问题讨论】:
-
C++ 有
<random>。我想我读过一次,虽然它可能完全是伪造的记忆,但 C# 使用 MT。 -
看到模式对于人类大脑来说是很自然的。事实上,如果你没有看到模式,我会担心随机函数的随机性。 1 0 0 0 0 1 1 1 0 0 0 0 0 可能比 1 0 1 0 1 0 0 1 0 1 0 1 0 0 随机得多
-
@BasvandenBroek:这里的问题是模式是可预测的。这不仅仅是一个块,而是完整的随机序列。
-
定义“更随机”。它们之间的区别通常是用作发电机的任何东西的周期长度。显然
java.util.Random使用线性同余生成器,与 C 中的rand类似。C++11 引入了mt19937(Mersenne Twister)等等。不过,它们在底层都是确定性的(因此是 PRNG 中的伪)。 -
@Thomas 为什么会这样?这在 Stack Overflow 上很少发生。