C#随机浮点闭区间

C#随机浮点闭区间,c#,random,floating-point,intervals,C#,Random,Floating Point,Intervals,我很惊讶我在任何地方都找不到答案,所以也许我遗漏了什么 类的方法在[0.0,1.0)。这是一个半开区间,返回0.0浮点的位表示意味着有限数量的不同值。确定可能的浮点值的数量,在该范围内获得一个随机整数,并将该值映射/转换为浮点范围。这似乎很简单: 决定你希望1.0平均出现的频率。比如说,每十亿次出现一次 从钟形分布中生成一个介于0到20亿之间的随机整数,平均值为10亿,称之为n 在开放区间生成n个随机数 生成1.0 重复一遍 现在,我们得到了一个封闭区间上的随机数序列,其中1.0表示平均预期

我很惊讶我在任何地方都找不到答案,所以也许我遗漏了什么


类的方法在
[0.0,1.0)
。这是一个半开区间,返回
0.0浮点的位表示意味着有限数量的不同值。确定可能的浮点值的数量,在该范围内获得一个随机整数,并将该值映射/转换为浮点范围。

这似乎很简单:

  • 决定你希望1.0平均出现的频率。比如说,每十亿次出现一次
  • 从钟形分布中生成一个介于0到20亿之间的随机整数,平均值为10亿,称之为n
  • 在开放区间生成n个随机数
  • 生成1.0
  • 重复一遍

现在,我们得到了一个封闭区间上的随机数序列,其中1.0表示平均预期次数。大约每10亿次,我们会得到一个昂贵的钟形计算,其摊销成本基本为零。

这里有几个问题,但是让我试着更好地理解这一点,你想要随机数吗在X和Y(包括X和Y)之间浮动(16位),尽可能随机,即尽可能少的偏差这是正确的,尽管必要时我可能降级到8位。MSDN说:random.NextDouble()方法返回的随机数的实际上限是0.999999999999999978。对,这就是为什么
random.NextDouble()
是排他性的。我正在寻找一个包容性的变体。但是,有一个问题是,将一个将其值均匀分布到较窄格式的
NextDouble
的结果转换为一个不均匀的版本可能会产生一个不均匀的版本。在.125或.5等内部数字周围,有一个宽度为w的间隔,其中所有数字都四舍五入到n数字。然而,在0和1时,只有宽度为½w的间隔内的数字才四舍五入到0或1,因此它们出现的频率比其他数字要低。你可能应该更彻底地描述你的问题,并要求一个完整的解决方案,而不是仅仅要求关闭下一个双倍间隔。我不认为这是一个收敛于正态分布的e分布。要获得额外值的相同分布独立外观,需要几何分布:
Random.NextDouble() * ((NextAfter(max, max + 1.0) - min) + min);