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...
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...
One way is checking that the return value of Random.Next(100)
is less than your desired probability. I can't speak to the true 'randomness' of this method though.
Proper example, using desired probability of 20%:
Random gen = new Random();
int prob = gen.Next(100);
return prob < 20;
Random.Next()
would be. I don't know if that is the same as it's randomness
though.
myRandomBool = new Random().Next(100) <= 50 ? true : false
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)
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
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
:
I think it can help you
Random gen = new Random();
bool result = gen.Next(100) < 50 ? true : false;
gen.Next(100) < 50
is boolean expression. No need to use the conditional operator here.
Jul 9, 2015 at 4:23
For future knowledge:
40:60 would be:
var random = new Random();
return random.Next(10) < 4;
20:80 would be:
var random = new Random();
return random.Next(5) == 0
and 1:1 would be:
var random = new Random();
return random.Next(2) == 1;
Note: Just shorten the probability to the shortest variant - as for example: "random.Next(5) == 0" is quicker then "random.Next(100) <= 20 Though - if the probability changes from the user input - then it would look like:
[ModifierByChoice] bool GetProbability(int trueProbability, int falseProbability)
{
var random = new Random();
return random.Next(trueProbability, trueProbability + falseProbability) < trueProbability;
}
<
operator and sometimes the ==
, once even comparing to zero and the other time comparing to nonzero.
Feb 11, 2019 at 18:22
Random gen = new Random();
var boolVal = gen.Next(0, 1)==1? true : false;
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...
. This answer is wrong.