在建模随机事件时加入或加倍

问题描述 投票:1回答:1

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

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

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

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

random
1个回答
3
投票

在这种情况下,如果程序中只使用随机数是model N in M chances,那么随机整数优于随机浮点数。这件事情是由很多原因导致的。

  • 计算机可以比浮点数更自然地表示整数。
  • 生成整数的伪随机数生成器(PRNG)算法更加便携,更容易确定。事实上,许多流行的PRNG,包括Mersenne Twister和线性同余生成器,输出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中出错。
© www.soinside.com 2019 - 2024. All rights reserved.