Generate Random Boolean Probability

62,954

Solution 1

Well, one way is Random.Next(100) <= 20 ? true : false, using the integer value of NextInt to force your own probability. I can't speak to the true 'randomness' of this method though.

More detailed example:

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

Solution 2

You generate a random number up to 100 exclusive and see if it's less than a given percent. Example:

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

More generally, for a probability of X/Y, use an idiom like:

if(random.Next(Y) < X)

Solution 3

Here is an extension method that will provide a random bool with specified probability (in percentage) of being true;

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

you can use this like

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

Solution 4

Assuming your probability is represented as double between 0.0 and 1.0, I would implement it more simply like this:

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

result will be true with the probability given by trueProbability

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

If this isn't "random enough", you can take a look at RNGCryptoServiceProvider:

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

Solution 5

I think it can help you

Random gen = new Random();
bool result = gen.Next(100) < 50 ? true : false;
Share:
62,954
Dark Side
Author by

Dark Side

Updated on July 09, 2022

Comments

  • Dark Side
    Dark Side almost 2 years

    I only know how I can generate a random boolean value (true/false). The default probability is 50:50

    But how can I generate a true false value with my own probability? Let's say it returns true with a probability of 40:60 or 20:80 etc...