我發佈了一堆開源隨機數生成器on my site,其中包括一個正態分佈的隨機數生成器。要生成一個範圍在10-20的隨機整數,我會寫一些像new NormalRandomGenerator(10, 20).Next()
。內部使用雙精度生成一個隨機數Integer
有人張貼此評論:
只是想知道是否有必要實施「INT下一步()」中的「雙NextDouble()」的 條款INT雙轉換(和 反之亦然)在某些硬件上可能非常慢,包括最近的PC 硬件,儘管目前我並不特別關注最新的CPU 。
我相信這個評論是指當有人呼籲我的一個類Next(20)
,在內部,該呼叫轉換爲類似(int)someMersenneTwister.NextDouble() * 20
(我不記得,如果我用四捨五入)的事實。
我這樣實現它,因爲MT既快速又高效(雖然它有一個巨大的隨機週期)。據我所知,這是生成隨機數的標準方法 - 調用Next()
,它返回範圍[0..1]中的雙精度值,然後將乘法和類型轉換爲int。
在我的設計方面,這裏有任何問題嗎?有沒有更好的方法(更高性能,更快)來生成不使用雙精度的整數隨機數?
對不起,如果這聽起來含糊不清。我不確定這裏是否有問題。
我甚至不明白在有限的範圍內的整數怎麼能有一個正常/高斯分佈。該分佈在整個實軸上返回連續值。 – CodesInChaos 2012-03-24 17:32:29
總是可以屏蔽掉較小數字的位數,我想這會更快。除此之外,我什麼也沒得到。 – SimpleVar 2012-03-24 17:35:53
對於在給定的時間間隔檢查*均勻*整數[我的問題](http://stackoverflow.com/q/9499071/445517)和[我的隨機文庫(https://github.com/MerkatorProject/Merkator.Tools /tree/master/Merkator.Tools/Random) – CodesInChaos 2012-03-24 17:38:58