Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 生成随机布尔概率_C#_.net_Random_Boolean_Probability - Fatal编程技术网

C# 生成随机布尔概率

C# 生成随机布尔概率,c#,.net,random,boolean,probability,C#,.net,Random,Boolean,Probability,我只知道如何生成随机布尔值(真/假)。 默认概率为50:50 但是,我如何用自己的概率生成一个真值和假值呢? 假设它以40:60或20:80等的概率返回真。您生成一个最大为100的随机数,然后查看它是否小于给定的百分比。例如: if(random.Next(100) < 40) { // will be true 40% of the time } if(随机下一步(100)

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

但是,我如何用自己的概率生成一个真值和假值呢?
假设它以40:60或20:80等的概率返回真。

您生成一个最大为100的随机数,然后查看它是否小于给定的百分比。例如:

if(random.Next(100) < 40) {
  // will be true 40% of the time
}
if(随机下一步(100)<40){
//40%的情况下都是这样
}
更一般地说,对于X/Y的概率,请使用以下习惯用法:

if(random.Next(Y) < X)
if(随机下一个(Y)
好吧,一种方法是
随机。接下来(100)假设概率表示为0.0到1.0之间的
,我将更简单地实现它:

Random rand = new Random();
...
double trueProbability = 0.2;
bool result = rand.NextDouble() < trueProbability;
Random rand=new Random();
...
双真实概率=0.2;
bool result=rand.NextDouble()
结果
将为
,概率由
真概率

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


这里有一个扩展方法,它将提供一个随机布尔值,指定概率(百分比)为真

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

我想它可以帮助你

Random gen = new Random();
bool result = gen.Next(100) < 50 ? true : false;
Random gen=new Random();
布尔结果=下一代(100)<50?真:假;
了解未来知识:

40:60将是:

var random = new Random();
return random.Next(10) < 4;
var random = new Random();
return random.Next(5) == 0
var random = new Random();
return random.Next(2) == 1;
1:1是:

var random = new Random();
return random.Next(10) < 4;
var random = new Random();
return random.Next(5) == 0
var random = new Random();
return random.Next(2) == 1;

注意:只需将概率缩短为最短的变量-例如:“random.Next(5)=0”比“random.Next(100)生成一个介于1和100之间的随机数,并将其与您的分布进行比较?到目前为止您做了什么?为了完全代表真实概率,您不应该执行@hubsonbropa No,因为NextDouble()返回一个介于0(包括)和1(排除)之间的值。如果外推到100%概率,<1就足够了。@hubsonbropa同样,0%不应该为真。覆盖该情况的唯一方法是检查<0。表达式
gen.Next(100)<50
是布尔表达式。这里不需要使用条件运算符。问题是:
但我如何以自己的概率生成真-假值?假设它以40:60或20:80等概率返回真。
这个答案是错误的。我敢假设这些布尔值的可预测性只是与
random.Next()
一样随机。不过,我不知道这是否与
random
一样。对我来说,在ASP.Net中,工作语法更加复杂:
myRandomBool=new random()。Next(100)@E.Moffat:
?true:false
是冗余代码。通过减少分数,代码中写入的数字会突然变成神奇的数字。除非你能够并且确实能够通过使用更大的数字来证明速度明显减慢,否则减少分数的建议会适得其反。此外,这可能会让你困惑有时使用

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