§2. Таблицы случайных чисел: случайность, записанная в общак
Раз уж физический датчик не повторишь и к компьютеру не прикрутишь — напрашивается ход: прогнать датчик один раз, а результат записать. Получится таблица случайных чисел — зафиксированные выходы какого-то честного датчика. Обычно это длинная последовательность псевдослучайных цифр (), разбитая на группы для удобства. Записал один раз в тетрадку — и пользуйся сколько влезет, всегда та же самая.
Как сколотить свою таблицу
Таблицу может намотать кто угодно, инструмент — любой честный жребий:
- Шляпа с бумажками. Накидай в шапку десять бумажек с цифрами от до , тяни наугад (и возвращай обратно). Какая цифра выпала — такую и записал.
- Икосаэдр. Это кубик на граней (знаешь, такой у настольщиков). Наносим каждую цифру по два раза (на 2 из 20 граней) — и катаем. Двадцать граней, каждая цифра честно занимает одну десятую, блата нет.
По-дворовому: это как общак случайности — один раз честно скинулись цифрами, записали в тетрадь, и дальше весь район берёт оттуда, не перекатывая кубик заново.
Как добыть из таблицы число
Таблица — это просто сетка цифр. Чтобы получить число , делаем так:
- Ткни наугад стартовую клетку — загадай строку и столбец, не глядя (чтобы и выбор места был случайным).
- Считанные цифры — это знаки после запятой. Например, попал в цифры и — получил .
- Дальше идёшь по столбцу вниз (или по строке — как договорился заранее, лишь бы порядок не зависел от самих цифр) и снимаешь следующие числа: , , , и так далее.
Нужна точность побольше? Бери цифры парами из соседних столбцов — получишь по четыре знака: , , …
Пощупаем: ниже код сам катает «таблицу» и снимает из неё числа. Жми Run, покрути — числа каждый раз свежие:
Подвох: таблица может и соврать
Казалось бы — что тут ломаться. Но с таблицами есть две засады.
Первая: таблица может оказаться кривой — датчик, которым её мотали, был так себе, и в цифрах притаилась закономерность. Вторая, тоньше: даже «хорошая» на вид таблица при неаккуратном использовании приводит к неверным выводам (отдельная показательная история ждёт нас в §5 — «эксперимент Неудачи»).
Классический пример — цифры числа . Казалось бы, что может быть «случайнее»: берём знаков после запятой и объявляем их таблицей случайных цифр. Но вот незадача: среди первых цифр ноль встречается всего раз. А должно бы — около тысячи (каждая цифра занимает свою десятую). Насколько это подозрительно? Прикинем по центральной предельной теореме.
Разберём по кирпичикам, откуда берётся «норма» и «разброс»:
- Каждая из цифр — это испытание «ноль / не ноль» с шансом . Схема Бернулли, как в первой главе.
- Сколько нулей ждём в среднем: .
- Разброс (стандартное отклонение) по формуле для биномиального: .
- Насколько далеко от нормы: — то есть на сигмы ниже среднего.
А по ЦПТ отклонение сильнее двух сигм случается примерно в двух случаях из ста. То есть в этом месте ведёт себя как довольно редкий, «везучий» (точнее, невезучий на нули) образец — на грани приличия. Пользоваться цифрами как случайными можно, но с оглядкой. Прогоним это рассуждение на честных случайных цифрах и сравним с :
Впиши, насколько (в сигмах) 937 нулей отклоняется от нормы — по формуле выше (округли до одного знака, со знаком минус):
Почему таблицы тоже не выход
Таблица воспроизводима (та же тетрадь — те же числа) и честна, если датчик был хорош. Но для компьютера у неё свой минус: чтобы разыграть серьёзную симуляцию, нужны многие тысячи и миллионы чисел, а таблицу такого размера надо где-то хранить — она сожрёт уйму памяти. Таскать с собой гигантскую тетрадь неудобно.
Поэтому на практике чаще берут математические датчики — короткие алгоритмы, которые рождают псевдослучайные числа прямо на лету, без всякой тетради. Как они устроены, где их сила и где знаменитый провал — в следующем параграфе.