考虑.NET Random流:
var r = new Random();
while (true)
{
r.Next();
}
Run Code Online (Sandbox Code Playgroud)
重复需要多长时间?
LBu*_*kin 13
根据文件:
从有限的数字集合中以相等的概率选择伪随机数.所选择的数字不是完全随机的,因为使用确定的数学算法来选择它们,但是出于实际目的它们是足够随机的.Random类的当前实现基于Donald E. Knuth的减法随机数生成器算法.有关更多信息,请参阅DE Knuth."计算机编程的艺术,第2卷:半数值算法".Addison-Wesley,Reading,MA,第二版,1981.
减法生成器(Knuth,Vol 2)Xf,n =(Xf,nk-Xf,nj)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)
Run Code Online (Sandbox Code Playgroud)
实际上,随机数根据需要分批生成并存储在充当循环缓冲区的数组中.
提到的算法的周期取决于种子值 - 您可以在此处找到更多详细信息.
| 归档时间: |
|
| 查看次数: |
2244 次 |
| 最近记录: |