Javascript 你怎么能得到50%的赔率?

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”和

当一个随机值是介于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”和
作为“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分割的总影响。。。