从理论上讲,如果我想对概率为50%的事件建模,例如,我只能生成一个布尔值,并在返回true时执行该事件。
现在,这也可以通过生成一个介于0到100(含)之间的随机双精度数来实现,如果数字大于50,则执行该事件。
从理论上讲,这两种解决方案都可以。但是,实际上,我知道随机数生成器实际上是伪随机数生成器,这是一个有点复杂的话题。
尽管如此,我想知道实现一种方法或另一种方法的含义(如果有)。
答案 0 :(得分:3)
在这种情况下,如果程序中唯一使用随机数是model N in M chances,则随机整数要好于随机浮点数。造成这种情况的原因很多。
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中也会出错。