我想在兩個值之間生成一個隨機浮點數。在C#中執行此操作的最佳方法是什麼?如何在C#中生成一個隨機數?
回答
我唯一加入Eric的回答是一個解釋;我覺得爲什麼代碼能夠工作的知識比知道代碼的工作更好。
解釋是這樣的:假設你想要一個介於2.5和4.5之間的數字。範圍是2.0(4.5 - 2.5)。 NextDouble
只返回一個介於0和1.0之間的數字,但如果將此乘以範圍,則將得到一個介於0和之間的數字。
那麼,這會給我們隨機雙打0.0和2.0之間:
rng.NextDouble() * 2.0
但是,我們希望他們在2.5和4.5之間!我們如何做到這一點?添加最小的數字,2.5:
2.5 + rng.NextDouble() * 2.0
現在,我們得到一個介於0.0和2.0之間的數字;如果你爲這些值中的每一個加2.5,我們就會發現現在的範圍在2.5到4.5之間。
起初我認爲它是重要的,如果b> a或a> b,但如果你解決這兩種方式,你會發現它的工作原理相同,只要你不弄亂變量的順序用過的。我喜歡長變量名來表達它,所以我不弄混:
double NextDouble(Random rng, double min, double max) { return min + (rng.NextDouble() * (max - min)); }
// generate a random number starting with 5 and less than 15
Random r = new Random();
int num = r.Next(5, 15);
雙打您可以NextDouble
System.Random r = new System.Random();
double rnd(double a, double b)
{
return a + r.NextDouble()*(b-a);
}
更換下一步如何隨機的?如果你能處理的僞隨機後來乾脆:
Random randNum = new Random();
randNum. NextDouble(Min, Max);
如果你想要一個「更好」的隨機數,那麼你可能應該看看梅森倍捻機算法。很多人對你而言有already implemented it雖然
下面是如何獲得Cryographically安全隨機數的片段: 這將在8個字節填充一個crytographically強隨機值序列。
byte[] salt = new byte[8];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(salt);
欲瞭解更多詳情,請參閱How Random is your Random??"
(上甲板洗牌一CodingHorror文章的啓發)有關爲何Longhorn中已經downmodded這麼多的交代:http://msdn.microsoft.com/en-us/magazine/cc163367.aspx查找NextDouble的實施和解釋什麼是一個隨機雙。
該鏈接也是如何使用密碼隨機數(如Sameer提到的)的實例,只有實際有用的輸出而不是比特流。
- 1. C++:如何從一個數組中生成一個隨機數
- 2. 如何在Haskell中隨機生成一個隨機生成的數字列表
- 3. 如何在C中生成一個真正的隨機數?
- 4. 我如何使用隨機類在C#中生成一個隨機數(XNA)
- 5. 如何生成一個隨機數
- 6. 在SML中生成一個隨機數
- 7. 在JavaScript中生成一個隨機數
- 8. 在LibGDX中生成一個隨機數
- 9. 在Uppaal中生成一個隨機數
- 10. 在Haskell中生成一個隨機數
- 11. 在CakePHP中生成一個隨機數?
- 12. 如何生成一個隨機數......?在c#
- 13. 如何在C範圍內生成一個隨機數?
- 14. 在c中生成整數隨機數#
- 15. C++在函數中生成隨機數
- 16. 在隨機生成50個隨機數中使用隨機數#
- 17. 如何在objective-c中生成一個隨機日期?
- 18. 如何在C++中一次生成不同的隨機數?
- 19. 如何在c中生成唯一的隨機數字#
- 20. 生成一個隨機數,但每個隨機數在LUA/Love2d
- 21. 如何生成大的隨機數C
- 22. C++爲psudo隨機數生成器生成一個很好的隨機種子
- 23. 如何生成一個隨機數隨着前綴在Python
- 24. 隨機數生成器幫助不生成隨機數 - C
- 25. 在C中生成隨機數字
- 26. 在C++中生成隨機雙數
- 27. 如何在django中生成隨機數
- 28. 如何在java中生成隨機數
- 29. C - 生成隨機數
- 30. C++生成隨機數-1
這實際上並不準確。 NextDouble只在0.0和1.0之間生成。 – Bloodyaugust 2011-12-16 09:09:11