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

标签 c# random

我正试图在 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/

相关文章:

Android SQLite数据库选择随机查询

java - 具有加权柏林噪声的 map 生成器

C++ 随机数生成器 : How to make numbers random upon every execution

c# - 匹配数字类型的通用约束

c# - 模拟点击进入隐藏窗口

c# - Azure Service Fabric 无法使用 ASP.NET Core 在 VSTS 上执行 CI

Java随机设置两个变量,然后设置第三个变量

java - 随机落体及碰撞检测方法

c# - View 状态的安全问题

c# - 使用 LINQ 将回调应用于项目列表