C# · 12月 29, 2021

c# – 非常低的机会的随机生成

我试图在C#中获得一个随机的bool,用于科学项目.问题是,布尔真实的机会必须在10 ^ -12到10 ^ -14左右;默认随机函数仅生成int,并且0和[u]之间的值int.max远小.

如何生成一个随机布尔值,这样几率很低?

解决方法 编辑

Random.NextDouble()不会给出预期的结果!

正如Kyle在下面的评论中建议的那样,Random.NextDouble()的实现将一个int映射到间隔[0.0,1.0],有效地使我的代码等同于r.Next(0,Int32.MaxValue)== 0添加更多零将不会影响结果为false的概率.

使用其他答案之一,或使用此代码从System.Random生成ulong(范围0-18446744073709551615).

var r = new Random();var bytes = new byte[8];r.NextBytes(bytes);ulong result = BitConverter.ToUInt64(bytes,0);

原来的答案

警告:不会按预期工作,不要使用!仅供上下文使用.

使用Random.NextDouble():结果是0.0和1.0之间的双重

var r = new Random();var probablyFalseBool = r.NextDouble() < 0.0000000000001;

如果需要,改变零的数量.