我正试图在 C# 中为一个科学项目获取一个随机 bool 值。问题是 bool 为真的概率必须在 10^-12 到 10^-14 左右;默认的随机函数只生成整数,0 和 [u]int.max 之间的值太小了。
我怎样才能生成一个随机 bool 值,且其为真的概率如此之低?
最佳答案
编辑
Random.NextDouble() 不会给出预期的结果!
作为Kyle在下面的评论中建议,Random.NextDouble()
的实现将 int
映射到区间 [0.0 , 1.0),有效地使我的代码等同于 r .Next(0, Int32.MaxValue) == 0
。添加更多的零不会影响结果为假的概率。
使用其他答案之一,或使用此代码从 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;
必要时改变零的数量。
关于c# - 随机生成的机会非常低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23522571/