当随机值是介于0和1之间的浮点数(例如AS3或JavaScript的Math.random()
)时,其中哪一项会给完全 50%的几率?我已经看到它们都在实践中使用过:
if (Math.random() > 0.5) ...
if (Math.random() >= 0.5) ...
抬头:我在这里迂腐,因为在实践中,完全击中0.5
是天文数字低。但是,我仍然想知道0 inclusive
和1 exclusive
的中间位置。
答案 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
这个循环是无尽的。