Javascript 你怎么能得到50%的赔率?
当一个随机值是介于0和1之间的浮点值(例如AS3或JavaScript的Javascript 你怎么能得到50%的赔率?,javascript,actionscript-3,random,Javascript,Actionscript 3,Random,当一个随机值是介于0和1之间的浮点值(例如AS3或JavaScript的Math.random())时,以下哪一项会给出50%的几率?我在实践中看到了这两种方法: if (Math.random() > 0.5) ... if (Math.random() >= 0.5) ... 注意:我在这里太迂腐了,因为在实践中,精确的0.5是天文数字上的低。然而,我仍然想知道0 inclusive和1 exclusive从数学上讲,一项旨在将区间[0,1)(使用[作为“inclusive”和
Math.random()
)时,以下哪一项会给出50%的几率?我在实践中看到了这两种方法:
if (Math.random() > 0.5) ...
if (Math.random() >= 0.5) ...
注意:我在这里太迂腐了,因为在实践中,精确的
0.5
是天文数字上的低。然而,我仍然想知道0 inclusive
和1 exclusive
从数学上讲,一项旨在将区间[0,1)
(使用[
作为“inclusive”和作为“exclusive”)以精确的50-50比例分割的测试将使用如下比较:
if (Math.random() >= 0.5) ...
这是因为它将初始间隔[0,1)
分成两个相等的间隔[0,0.5)
和[0.5,1)
相比之下,测试
if (Math.random() > 0.5) ...
将间隔拆分为[0,0.5]
和(0.5,1)
,它们具有相同的长度,但第一个包含边界,而第二个不包含边界
在两个测试中,边界是否以相同的方式包含在一起在极限范围内并不重要,因为精度接近无穷大,但对于所有有限精度而言,这会产生微小但可测量的差异
假设精度限制为0.000001
(十进制),那么>=0.5
测试正好有[0,0.499999]
和[0.5,0.9999999]
,很明显,第一个间隔加上0.5(或从第二个间隔中减去)使两个间隔完全对齐。另一方面,在这种精度下,>0.5
测试使间隔[0,0.5]
和[0.500001,0.9999999]
在数字方面明显不相等两者都是相同的。因为你永远不会得到Math.random()==0.5
请尝试以下测试:
while (Math.random() !== 0.5) {}
这个循环是无止境的。如果地板是包含的,而屋顶是独占的,那么逻辑上=0.5
如果(Math.random()>=0.5)
就可以实现[0,1)
的精确中间。
不可能创建一个完美分割(0,1)
或[0,1]的测试
…如果你观察>=0.5,则为51-49。因此,正好50%将为>0。5@Scrooj:实际上正好相反……注意[0..0.49]
是50个数字和[0.5..0.99]
是50个数字。这取决于用于生成随机数的过程。如果Math.random
从单位间隔内的真实均匀分布中提取,则P(Math.random()>0.5)=P(Math.random()>=0.5)=0.5
。关于精度的说明很好。无数次重复随机数生成,“可忽略”的不平衡比率可能会发挥作用,具体取决于应用(赌场/法律/物理软件等,尽管这些软件可能会使用专用RNG).JS使用64位浮点,大约有15个定点精度的等效数字,因此对于大多数应用来说,这应该是可以的。请注意,OP提到了Javascript等,但没有具体假设这些语言中的任何一种,或者0.5
完全不存在。也许您可以扩展您的答案来定义条件和/或l在这种情况下,该数字不出现的语言,以及在这些情况下,统计数据会发生什么变化,甚至可能给出关于给定范围内不存在的其他数字的提示,以及这对预期的50:50分割的总影响。。。