加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 03:45:38 所属栏目:百科 来源:网络整理
导读:我试图在C#中获得一个随机的bool,用于科学项目.问题是,布尔真实的机会必须在10 ^ -12到10 ^ -14左右;默认随机函数仅生成int,并且0和[u]之间的值int.max远小. 如何生成一个随机布尔值,这样几率很低? 解决方法 编辑 Random.NextDouble()不会给出预期的结果!
我试图在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;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读