从理论上讲,如果我想对概率为50%的事件进行建模,我只能生成一个布尔值,并在事件返回true时执行该事件。
现在,这也可以通过生成0到100(包括0和100)之间的随机双精度来实现,并且如果数字大于50则执行该事件。
从理论上讲,这两种解决方案都可行。但是,在实践中,我知道随机数生成器实际上是伪随机数生成器,这是一个有点复杂的主题。
尽管如此,我想知道实现一种方法或另一种方法的含义(如果有的话)。
在这种情况下,如果程序中只使用随机数是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中出错。