2010-01-08 60 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函数慢。整数和随机类相同。

相关问题