考虑.NET Random
流:
var r = new Random();
while (true)
{
r.Next();
}
重复需要多长时间?
答案 0 :(得分:13)
根据文件:
从有限的概率中选择具有相等概率的伪随机数 一组数字。所选的数字是 不是完全随机的,因为a 确定的数学算法是 用来选择它们,但它们是 足够随意实用 目的。目前的实施 Random类的基础是唐纳德 E. Knuth的减法随机数 发电机算法。更多 有关信息,请参阅D. E. Knuth。 “艺术 计算机程序设计,第2卷: 数值算法“。 Addison-Wesley,Reading,MA,第二名 版,1981。
减法发生器(Knuth,Vol 2) Xf,n =(Xf,n-k-Xf,n-j)mod 1。 有关k和j的可能值的表,请参见Knuth。我们选择k = 63,j = 31.这个生成器很有意思,因为:
当X是表格时,第二个属性成立 l 247 (0 l< 247) 单精度算法在Crays(48位尾数)上是精确的,在IEEE兼容机器上也是双精度算术。
这允许Fortran代码生成基本随机数序列
x(n) = x(n-k) - x(n-j)
if (x(n) < 0.0) x(n) = 1.0 + x(n)
实际上,随机数会根据需要分批生成并存储在充当循环缓冲区的数组中。
提到的算法的周期取决于种子值 - 您可以找到more details here。