生成随机布尔概率

时间:2014-08-12 23:44:32

标签: c# .net random boolean probability

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

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

7 个答案:

答案 0 :(得分:40)

好吧,一种方法是Random.Next(100) <= 20 ? true : false,使用NextInt的整数值强制你自己的概率。我无法说出真正的随机性&#39;但是这种方法。

更详细的例子:

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

答案 1 :(得分:17)

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

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

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

if(random.Next(Y) < X)

答案 2 :(得分:10)

这是一个扩展方法,它将提供一个指定概率(百分比)为true的随机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

答案 3 :(得分:8)

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

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

resulttrue的概率为trueProbability

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

如果这不是&#34; 随机&#34;,您可以查看RNGCryptoServiceProvider

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

答案 4 :(得分:2)

我认为它可以帮到你

prepareAsync()

答案 5 :(得分:0)

为了将来的知识:

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;

注意:只需缩短最短变体的概率 - 例如:&#34; random.Next(5)== 0&#34;然后更快&#34; random.Next(100)&lt; = 20 虽然 - 如果概率从用户输入改变 - 那么它看起来像:

[ModifierByChoice] bool GetProbability(int trueProbability, int falseProbability)
{
var random = new Random();
return random.Next(trueProbability, trueProbability + falseProbability) < trueProbability;
}

答案 6 :(得分:-3)

Random gen = new Random();
var boolVal = gen.Next(0, 1)==1? true : false;
相关问题