1. 程式人生 > >程式設計小知識之 Random介面返回值

程式設計小知識之 Random介面返回值

本文簡述了 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.RandomRange(float min, float max)value 兩個方法的返回值範圍是全閉區間.

參考

  1. System.Random Doc
  2. UnityEngine.Random Doc