你怎么得到50%的赔率?

时间:2014-02-02 04:43:26

标签: javascript actionscript-3 random

当随机值是介于0和1之间的浮点数(例如AS3或JavaScript的Math.random())时,其中哪一项会给完全 50%的几率?我已经看到它们都在实践中使用过:

if (Math.random() > 0.5) ...
if (Math.random() >= 0.5) ...

抬头:我在这里迂腐,因为在实践中,完全击中0.5是天文数字低。但是,我仍然想知道0 inclusive1 exclusive的中间位置。

2 个答案:

答案 0 :(得分:38)

从数学角度讲,用于将间隔[0,1)(使用[作为“包含”和)作为排他性)以精确的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.999999],并且很明显看到向第一个添加0.5间隔(或从第二个减去它)使两个间隔完美对齐。另一方面,在这种精确度下,>0.5测试使得间隔[0,0.5][0.500001,0.999999]明显不相等,有利于数字<=0.5。事实上,这个比例是500001:499999,这显然与50:50明显不同,但差异完全相同。

答案 1 :(得分:0)

两者相同。因为你永远不会得到Math.random()=== 0.5

请尝试此测试:

Sub Test()

Columns("A:A").Select
        Selection.Find(What:="Bird", After:=ActiveCell, LookIn:=x1Formulas2, _
        LookAt:=x1Part, SearchOrder:=x1ByRows, SearchDirection:=x1Next, _
        MatchCase:=False, SearchFormulas:=False).Activate
    Selection.Style = "Good"
    Cells.FindNext(After:=ActiveCell).Activate

    
End Sub

这个循环是无尽的。