到目前为止,我一直在使用这里找到的 C# Mersenne Twister来生成随机数:
http://www.centerspace.net/resources.php
我刚刚发现SFMT应该是这里的两倍:
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/
谁能指出我的 SFMT 的 C# 实现?
我的要求是生成(包括)0 和 2^20(1048576)之间的整数。
为了在 24 小时制上运行模拟,我每天需要做数万亿次,所以我准备花几天时间将它调整到完美。
目前,我通过添加一种新方法来调整 Center Space Mersenne Twister 以满足我的要求:
public uint Next20()
{
return (uint)(genrand_int32() >> 12);
}
使用genrand_int32()
我想生成我自己的版本的方法genrand_int20()
,生成一个介于(包括)0 和 2^20 之间的整数,以节省上面的演员表和移位,但我不懂数学。我该怎么做呢?
使用uint 会比 int 更快,还是只是可寻址数字的问题?因为我最多只需要1048576,所以我只关心速度。
这也将在带有 .NET 2 的 Windows Server 2003 R2 SP2(32 位)机器上运行。处理器是AMD Opteron 275(4 核)。