2017-05-21 96 views
3

我有一個百分比,例如40%。編號喜歡「擲骰子」,結果是基於概率。 (例如40%機率將是true)。以概率生成true或false布爾值

+0

'隨機隨機=新的隨機(); ...布爾結果= random.NextDouble()<= 0.40;' –

+0

我有概率僞造系統。當我點擊僞造一件物品時,確定物品會被僞造,或僞造失敗。這就是我正在做的事情。 –

+0

還有一個遊戲開發者的堆棧交換。在那裏負責統一專家。只是想我提到它。 – stevenvanc

回答

3

你可以嘗試這樣的事情:

public static bool NextBool(this Random random, double probability = 0.5) 
    { 
     if (random == null) 
     { 
      throw new ArgumentNullException(nameof(random)); 
     } 

     return random.NextDouble() <= probability; 
    } 
6

由於Random.NextDouble()回報均勻分佈在[0..1)範圍(僞)隨機值,你可以嘗試

// Simplest, but not thread safe 
private static Random random = new Random(); 

... 

double probability = 0.40; 

bool result = random.NextDouble() < probability; 
+0

我希望我可以兩次,一次是正確答案,另一次是在一個時間間隔內使用正確的數學符號。 – EJoshuaS

+1

超級挑選:我相信'<'在這裏比'<='更合適,因爲您希望'probability = 0.0'和'probability = 1.0'的邊界情況轉化爲「never」和「always」。使用'<=',當'概率= 0.0'時''result'有一個非零的機會。 –

+0

@Mark Dickinson:謝謝你!我同意你的反例:通常包含/排除點不起任何作用,因爲* exact *值的概率是* zero *。然而,我們沒有* random * NextDouble()和* probability = 0.0的*完全*均勻分佈是一個反例。我編輯了我的答案 –

0

您可以使用內置的Random.NextDouble()

返回一個隨機浮點數大於或等於0.0,且小於1.0

然後可以測試數量是否大於概率值大於:

static Random random = new Random(); 

public static void Main() 
{ 
    // call the method 100 times and print its result... 
    for(var i = 1; i <= 100; i++) 
     Console.WriteLine("Test {0}: {1}", i, ForgeItem(0.4)); 
} 

public static bool ForgeItem(double probability) 
{ 
    var randomValue = random.NextDouble(); 
    return randomValue <= probability; 
} 

注意到相同Random實例必須使用Here is the Fiddle example

1

簡單Unity解決方案:

bool result = Random.Range(0f, 1f) < probability; 
相關問題