2010-01-08 84 views
2

什麼是隨機生成數字的最快方法,可以是隨機生成還是模擬隨機生成?我真的不需要一個真正的隨機數發生器,它是可以接受的模擬隨機。我嘗試了其他隨機模擬方法,但沒有一個比這更快。什麼是在Visual Basic 2008中隨機生成數字的最快方法?

這是我現在的最快方法:

Private myRandom As New System.Random(CType(System.DateTime.Now.Ticks Mod System.Int32.MaxValue, Integer)) 
Private sub Test1 
    Dim F as integer = myRandom(0, 203) 
End Sub 
+3

「Random」類有什麼問題?順便說一下,你不需要自己種子;它會默認使用'Environment.TickCount'作爲種子。 – SLaks 2010-01-08 03:50:49

+1

必備xkcd參考:'int random(){return 4; } //通過公平的擲骰子選擇。' – 2010-01-08 03:59:27

+0

+1 Jon指出質量和速度之間存在權衡 – 2010-01-08 04:01:29

回答

3

我能想到的一些隨機的號碼最快的方法是產生一個大陣的隨機數的事先知道你循環歷經。這也可能會導致質量很差的結果,除非陣列的大小很大。質量也會受到您如何生成數字的影響。

2

你真正需要的最快方法是什麼?它的質量的最小限制是什麼?

我懷疑隨機內置隨機數發生器Random雖然不一定是最快的,但它在「最低標準」和速度之間有一個合理的折衷。

如果沒有,這裏有一些其他隨機數發生器的信息,其中一些可能更快,其中一些可能更糟。質量和速度之間會有一個折衷,所以我懷疑你會想要最快的一個。

http://www.google.ca/search?source=ig&hl=en&rlz=1R2ADSA_enCA338&q=FAST+pseudo+random+number+generator&meta=lr%3D&aq=f&oq=

`

1

這裏有三種方法可以做到這一點,在速度的順序(19毫秒一百萬次迭代,在我的測試):

dim rand as new random(0) 

i = rand.next 

慢一點是對XKCD函數的調用(24毫秒) :

function random as integer 
random = 4 ' chosen by fair dice roll 
end function 

而且慢一點又是浮點VB功能(67毫秒):

x = rnd(x) 

每個我的甚至比採用系統時鐘滴答的最後幾位還要快。函數的開銷似乎足以證明使用內建的隨機函數是合理的。例如,如果使用幾乎任何算法生成浮點隨機數,它最終將比rnd vb函數慢。整數和隨機類相同。

相關問題