如何在C#中使用maxValue(和/或minValue)支持填充字節數組的快速RNG(隨機數生成器)? 我找到了這個http://www.codeproject.com/KB/cs/fastrandom.aspx,但沒有這些功能。快速隨機生成器
快速隨機生成器
回答
,你填個字節的整數的事實就足以從不同System.Random的典型用例,如果您真的需要,您可能會很糟糕。
System.Random是爲一般用途而製作的。 (實際上,當我對它們進行速度和分配測試時,我通常會發現系統隨機例程不夠靈敏。)有些情況下,您需要其他東西。但是你必須對你的需求非常明確。多快?你願意放棄什麼?
如果您真的需要「快速」,Marsaglia已經生成了很多非常快速的隨機數生成器,可以根據您的需要進行調整。下面是關於他們的一個幾個環節,Xorshift:
- Xorshift (Wikipedia)
- Fastest implementation of Xorshift in C#, and measurements comparing it to System.Random
- 的Diehard tests很有趣。
- Agner has C++ code許多快速隨機。
- Here's a fast twister使用SIMD指令。
最後一個解決了你指定字節的事實。
我只需要幾次超快的隨機數。在慢速處理器的控制檯遊戲中,隨機可以使命中幀速率目標而不是命中目標。你的用例是什麼?通過一切手段,如果可以的話,使用System.Random。
或者,修改您在問題中鏈接到的例程(作者聲稱這是System.Random速度的8倍。)
這最後一個環節是相當有趣的研究,+1 – 2009-11-24 15:59:25
謝謝您的回答,RNG必須儘可能快速地,我有很多很多的隨機數在幾秒鐘內生成(10^9以上)。 我試圖在我的鏈接中修改常規,但我沒有成功,你能幫我嗎? – tazzo 2009-11-24 22:54:32
有很多可能性。想象一下,你已經爲範圍設置了一個4k的隨機數緩衝區(比如0-100)。使用隨機數生成器來選擇偏移量並抓取,例如從列表中選擇16個字節。然後生成另一個偏移量並獲取另外16個字節。這不會是_fantastically_ random,但它可能是_lyfficiently_ random。儘管我問了,但你沒有告訴我你願意放棄什麼來獲得速度。用這些數字你會做什麼? – Nosredna 2009-11-25 00:38:00
您可以使用Reflector將System.Random反編譯爲C#。這會給你一個滿足你需求的快速隨機數生成器的C#代碼。
實際上,不...框架是預編譯和優化的,你不能與之競爭(直到你還預編譯你的代碼)。至少這是我所做的經驗(當試圖超出框架時))。 – Bobby 2009-11-24 15:37:32
爲什麼他會那樣做?據推測,自從他問道,隨機性太慢了,否則他會用這個,不是嗎? – 2009-11-24 15:39:14
@Bobby:令人沮喪,真實。不過,預編譯自己的代碼無濟於事。 – 2009-11-24 15:40:06
System.Random對於任何典型用途都足夠快。如果您在使用包含System.Random調用的代碼時遇到性能問題,請確保在嘗試構建新的隨機程序之前在之前對代碼進行概要分析。機會是你的性能問題不在框架中,而是在你自己的代碼中。
如果您在循環中調用Random,請確保您沒有爲每次迭代創建新的Random實例,而是重新使用常見的Random實例。這樣做可以提高性能,因爲您不會爲GC進行清理創建新對象,並且還會提高生成的隨機數的質量。
使用加密服務....
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
byte[] bytes= new byte[5];
crypto.GetBytes(bytes);
當然
,這隻能滿足字節區域需求...
如果您有一個隨機數生成器從單位時間間隔返回數字,就像您提到的代碼項目文章中的那個一樣,那麼您可以首先使用該生成器生成一個值u
,然後返回a + (b-a)*u
以在a和b。
如果我選擇A = 5和B = 20,U = 55,我的公式是不正確的,我得到5+(20-5)* 55 = 830。 正確的公式是U /(UMAX + 1)*(B-A)+ A其中UMAX是隨機數的最大值。 – tazzo 2009-11-26 14:39:24
如果隨機值u來自*單位間隔*,即介於0和1之間,那麼公式是正確的。在你的例子中,u = 55不是0到1之間的數字。 – 2009-11-28 14:11:33
- 1. 快速隨機正態分佈生成器
- 2. 用於C#的快速線程安全隨機數生成器
- 3. 生成隨機字符串,無需重複快速
- 4. 什麼是隨機數生成的快速模取代?
- 5. 隨機快速排序C#
- 6. 隨機快速排序
- 7. 快速探索隨機樹
- 8. 隨機數生成器幫助不生成隨機數 - C
- 9. 生成隨機數...更快的方法?
- 10. 需要一個快速隨機發生器爲C++
- 11. 隨機字生成器python
- 12. 隨機數據生成器
- 13. 隨機季節生成器
- 14. 隨機生成器和CUDA
- 15. 隨機生成器Objective-C
- 16. 隨機字生成器#2
- 17. Javascript隨機生成器
- 18. Python隨機數生成器
- 19. 隨機文本生成器
- 20. 隨機批生成器Tensorflow
- 21. 隨機詩生成器
- 22. 隨機報價生成器
- 23. 隨機樣本生成器
- 24. 隨機JSON生成器
- 25. 隨機索引生成器
- 26. 隨機QRCode生成器
- 27. 隨機測驗生成器
- 28. 隨機數據生成器
- 29. Haskell的隨機發生器:鏈生成的隨機值
- 30. 快速查看生成器iOS
System.Random是否太慢? – driis 2009-11-24 15:26:58
它可能很好。他正在填充字節,這是一個非常特殊的情況。旨在填充字節的代碼可能會快一個數量級或更多。他需要那個速度嗎?我不知道。 – Nosredna 2009-11-24 15:49:41
是的,System.Random太慢了。我有許多隨機數字來生成。 – tazzo 2009-11-24 22:41:29