程式設計小知識之 Random介面返回值
阿新 • • 發佈:2018-11-23
本文簡述了 Random 介面返回值的一些相關資訊
平日工作中,(偽)隨機數的使用一定是避不開的,拿 C# 為例,System 名稱空間下的 Random 型別一般都是我們生成(偽)隨機數的第一選擇:
var rand = new System.Random();
var val = rand.NextDouble();
Unity 中也在 UnityEngine 名稱空間下提供了自己的 Random 型別,不過介面方法上都是靜態型別:
var val = UnityEngine.Random.value;
上述的介面方法使用上似乎都很簡單,但是深入一下介面細節,可能就不是所有同學都瞭解了,甚至還會產生混淆:
System.Random 的 NextDouble 方法返回的(偽)隨機數的範圍是多少? 那麼 UnityEngine.Random.value 呢?
很多同學可能都知道答案: 0.0 ~ 1.0
那麼接著問:
這些返回值包含 0.0 和 1.0 這兩個端點嗎?
到這裡可能有些同學就會有些混淆了,答案是這樣的:
System.Random 的 NextDouble 的返回值範圍 >= 0.0 並且 < 1.0, 即 [0.0, 1.0)
UnityEngine.Random.value 的返回值範圍 >= 0.0 並且 <= 1.0, 即 [0.0, 1.0]
兩者的返回值範圍不同導致了混淆的產生,使用時不加註意的話自然也會導致錯誤.
這裡將相關常用的 Random 方法以表格列出,方便記憶和查閱:
型別 | 方法 | 返回值 |
---|---|---|
System.Random | Next() | [0, int.MaxValue) |
System.Random | Next(int max) | [0, max) |
System.Random | Next(int min, int max) | [min, max) |
System.Random | NextDouble() | [0.0, 1.0) |
UnityEngine.Random | Range(int min, int max) | [min, max) |
UnityEngine.Random | Range(float min, float max) | [min, max] |
UnityEngine.Random | value | [0.0f, 1.0f] |
注意到下面一點可能有助於我們的記憶:
Random 介面方法的返回值範圍一般都是左閉右開的,僅 UnityEngine.Random 的 Range(float min, float max) 和 value 兩個方法的返回值範圍是全閉區間.