Ответ 1
Математически тест, предназначенный для разделения интервала [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, но все равно отличается.