Подтвердить что ты не робот

Генерация случайной булевой вероятности

Я знаю только, как я могу генерировать случайное логическое значение (true/false). Вероятность по умолчанию - 50:50

Но как я могу сгенерировать истинное ложное значение с моей собственной вероятностью? Пусть говорят, что он возвращает true с вероятностью 40:60 или 20:80 и т.д.

4b9b3361

Ответ 1

Ну, одним из способов является Random.Next(100) <= 20 ? true : false, используя целочисленное значение NextInt, чтобы заставить вашу собственную вероятность. Однако я не могу говорить об истинной "случайности" этого метода.

Более подробный пример:

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

Ответ 2

Вы генерируете случайное число до 100 исключений и смотрите, если он меньше заданного процента. Пример:

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

В более общем плане, для вероятности X/Y используйте идиому вроде:

if(random.Next(Y) < X)

Ответ 3

Предполагая, что ваша вероятность представлена ​​как double между 0.0 и 1.0, я бы выполнил ее более просто:

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

result будет true с вероятностью, заданной 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

Ответ 4

Вот метод расширения, который предоставит случайный 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

Ответ 5

Я думаю, это может помочь вам

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

Ответ 6

Для будущих знаний:

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;
}

Ответ 7

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