Мы учимся доверять абстракциям, которые используем для программирования, и иногда не задумываемся о том, что происходит на более низком уровне. Одна функция, которую я использую очень часто и не могу понять, — это случайный метод. Вы берете набор вещей и получаете результат, который предположительно является случайным; и мы довольны этим. То, что это непредсказуемо для пользователя, не означает, что это действительно случайно, нам достаточно просто принять это. Итак, мой первый вопрос: что происходит под случайными функциями и действительно ли это случайно? Если нет, то как мы можем сделать функцию действительно случайной?

Случайная функция, как и любая другая программа, представляет собой набор процедур, которые дают вам результат. Это означает, что кто-то написал инструкции для этого метода, чтобы сделать выбор. Компьютерные программы по своей природе детерминированы, так как же возможно написать программу, которая не является детерминированной. Эта проблема может быть (почти) решена с помощью алгоритма, зависящего от реализации; алгоритм, зависящий от фактора (переменной), определяемого в момент реализации (запуска программы). Ruby, например, запустит свой алгоритм, используя комбинацию чисел с вашего компьютера, таких как время, идентификатор процесса и порядковый номер (если на вашем компьютере нет криптографического провайдера, предоставляющего номер для заполнения). Это заставит алгоритм давать результаты, которые кажутся неопределенными.

С алгоритмом, который уникален еще более уникальным начальным числом, мы можем все ближе и ближе приближаться к истинной случайности, но важно отметить, что это все еще не настоящая случайность. Чем сложнее начальное число, тем экспоненциально мы приближаемся к случайному, но оно никогда не будет по-настоящему случайным, а только псевдослучайным. Чтобы максимально приблизиться к случайному, нам нужно сгенерировать начальное число из полностью динамического, уникального и непредсказуемого источника. Атмосферный шум считается лучшим источником чего-то уникального и неопределенного, и Random.org использует его для создания того, что они называют истинной случайностью. Называть это истинной случайностью зависит от того, является ли сама Вселенная детерминированной или хаотической системой. Если вселенная функционирует процедурно и все определяется обстоятельствами, то атмосферный шум порождает случайность, как и наша временная метка, только более сложная. Это означало бы, что каждый доступный нам источник бесконечно приближал бы нас к истинной случайности, но не к истинной случайности. Если Вселенная — это хаотическая система, а атмосферный шум неопределен и уникален в каждый данный момент времени, то мы получили генератор случайных чисел.

Ресурсы моего безумия: