到目前爲止,我已經用在這裏找到了C#Mersenne Twister生成隨機數:C#梅森倍捻機隨機整數發電機執行(SFMT)蒙特卡羅模擬
http://www.centerspace.net/resources.php
我剛剛發現SFMT這是應該是快兩倍,在這裏:
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/
任何人都可以指向我在一個C#實現SFMT?
我的要求是生成(和包括)0和2^20(1048576)之間的整數。
我需要這樣做每天數萬億次模擬24小時運行時間,所以我準備花上幾天時間來調整這個完美。
public uint Next20()
{
return (uint)(genrand_int32() >> 12);
}
使用方法genrand_int32()
我想我製作自己的版本,genrand_int20()
,即產生:
目前我已經加入了新的方法,以適應我的要求調整了中心空間梅森倍捻機整數在(和包括)0和2^20之間以保存在上面,並且移位但我不瞭解數學。我到底該如何做到這一點?
也使用uint會更快,int,或者只是一個可尋址數字的問題?因爲我只需要1048576,我只關心速度。
同樣在此將一個的Windows Server 2003 R2 SP2(32位)盒.NET 2.處理器上運行是AMD Opteron 275(4芯)。
後的20位數字將代表範圍從0到2^20-1包容性,2^20需要21位來表示(1後跟20個零) – 2009-07-22 16:16:39
Nifle:不要將發生器的*週期*(它是序列的長度)與*間隔*混淆在哪個隨機數中。 – Joey 2009-07-22 16:23:54
@帕特里克感謝你是正確的2^20-1是我需要的,我需要隨機索引到一個長度爲2^20的數組。 – m3ntat 2009-07-22 16:30:25