对随机事件进行建模时,整数或双精度

时间:2019-04-13 17:27:47

标签: random

从理论上讲,如果我想对概率为50%的事件建模,例如,我只能生成一个布尔值,并在返回true时执行该事件。

现在,这也可以通过生成一个介于0到100(含)之间的随机双精度数来实现,如果数字大于50,则执行该事件。

从理论上讲,这两种解决方案都可以。但是,实际上,我知道随机数生成器实际上是伪随机数生成器,这是一个有点复杂的话题。

尽管如此,我想知道实现一种方法或另一种方法的含义(如果有)。

1 个答案:

答案 0 :(得分:3)

在这种情况下,如果程序中唯一使用随机数是model N in M chances,则随机整数要好于随机浮点数。造成这种情况的原因很多。

  • 计算机可以比浮点数更自然地表示整数。
  • 生成整数的伪随机数生成器(PRNG)算法具有更高的可移植性,并且更易于确定。实际上,包括Mersenne Twister和线性同余生成器在内的许多流行PRNG都输出N位整数值,而不是浮点数。
  • 在计算机中生成随机浮点数取决于生成随机整数,而不是相反。
  • 浮点实现和浮点数学在计算机平台和操作系统之间以微妙的方式变化,有时还以不确定性或不一致的方式变化。对于关心使用可重复的“随机”数字的应用程序,这是不利的。
  • 有许多微妙的点,涉及比较浮点数并将随机浮点数转换为整数。例如,采用成语RNDU01() < 0.1,这是十分之一的时间。 RNDU01()是[0,1)中的随机数。有many ways to implement RNDU01(),例如将32位数字除以2^32,将53位数字除以2^53,归一化大整数,等等。另外,在常见的浮点数格式中,0.1并不总是可表示为0.1。再举一个例子,用于在[0,N)中生成随机整数的JavaScript习惯用法Math.floor(Math.random()*N)several subtle ways中也会出错。