生成随机布尔概率

我只知道如何生成随机布尔值(true / false)。 默认概率为50:50

但是,如何以自己的概率生成真正的假值? 假设它以40:60或20:80等概率返回true …

好吧,一种方法是Random.Next(100) <= 20 ? true : false Random.Next(100) <= 20 ? true : false ,使用NextInt的整数值强制自己的概率。 我不能说这种方法的真正“随机性”。

更详细的例子:

 Random gen = new Random(); int prob = gen.Next(100); return prob <= 20; 

您生成一个最多100个独占的随机数,并查看它是否小于给定的百分比。 例:

 if(random.Next(100) < 40) { // will be true 40% of the time } 

更一般地说,对于X / Y的概率,使用如下的成语:

 if(random.Next(Y) < X) 

这是一个扩展方法,它将提供一个具有指定概率(百分比)为真的随机bool;

 public static bool NextBool(this Random r, int truePercentage = 50) { return r.NextDouble() < truePercentage / 100.0; } 

你可以像这样使用它

 Random r = new Random(); r.NextBool(); // returns true or false with equal probability r.NextBool(20); // 20% chance to be true; r.NextBool(100); // always return true r.NextBool(0); // always return false 

假设你的概率表示为0.0和1.0之间的double ,我会更简单地实现它:

 Random rand = new Random(); ... double trueProbability = 0.2; bool result = rand.NextDouble() < trueProbability; 

result将与trueProbability给出的概率trueProbability

http://msdn.microsoft.com/en-us/library/system.random.nextdouble(v=vs.110).aspx

如果这不是“ 足够随机 ”,您可以查看RNGCryptoServiceProvider

http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider(v=vs.110).aspx

我认为它可以帮到你

 Random gen = new Random(); bool result = gen.Next(100) < 50 ? true : false; 

为了将来的知识:

40:60将是:

 var random = new Random(); return random.Next(10) < 4; 

20:80将是:

 var random = new Random(); return random.Next(5) == 0 

和1:1将是:

 var random = new Random(); return random.Next(2) == 1; 

注意:只需缩短最短变体的概率 - 例如:“random.Next(5)== 0”然后“random.Next(100)<= 20虽然 - 如果概率从用户输入变化 - 然后它看起来像:

 [ModifierByChoice] bool GetProbability(int trueProbability, int falseProbability) { var random = new Random(); return random.Next(trueProbability, trueProbability + falseProbability) < trueProbability; } 
 Random gen = new Random(); var boolVal = gen.Next(0, 1)==1? true : false;