我正试图在C#中为一个科学项目获得一个随机的bool.问题是布尔值为真的几率必须在10 ^ -12到10 ^ -14之间; 默认随机函数只生成整数,0和[u]之间的值int.max远小.
如何生成一个具有如此低真实概率的随机布尔值?
Rik*_*Rik 15
编辑
正如Kyle在下面的评论中建议的那样,将Random.NextDouble()映射的实现一个int区间[0.0,1.0],有效地使我的代码等效于r.Next( 0, Int32.MaxValue ) == 0.添加更多的零不会影响结果为false的概率.
使用其他答案之一,或使用此代码生成ulong(范围0-18446744073709551615)System.Random.
var r = new Random();
var bytes = new byte[8];
r.NextBytes(bytes);
ulong result = BitConverter.ToUInt64(bytes, 0);
Run Code Online (Sandbox Code Playgroud)
警告:不会按预期工作,不要使用!仅为上下文提供.
Random.NextDouble()改为使用:结果是介于0.0和1.0之间的双精度
var r = new Random();
var probablyFalseBool = r.NextDouble() < 0.0000000000001;
Run Code Online (Sandbox Code Playgroud)
如有必要,可以改变零的数量.
Ant*_*nin 15
尝试组合多个随机选择:
if(rnd.Next(0,10000) == 0 && rnd.Next(0,10000) == 0 && rnd.Next(0,10000) == 0){
}
Run Code Online (Sandbox Code Playgroud)
不确定C#语法是否正确,但是输入if块的概率为10 ^ -12.