Сначала я собираюсь ответить на вторую часть вашего вопроса:
По сути, я хотел бы понять, почему не существует такого понятия, как действительно случайное число без соответствующего аппаратного обеспечения.
Вы не можете генерировать действительно случайные числа на компьютере без специального оборудования, потому что компьютеры являются детерминированными машинами. Это означает, что, учитывая некоторое начальное состояние и выполняемую операцию, вы можете точно предсказать , как будет развиваться машина. Например, если вы знаете, что в некоторой гипотетической архитектуре этот регистр %d0
содержит 24
, а регистр %d1
содержит 42
, и вы знаете, что следующая инструкция в потоке инструкций - add %d0 %d1 %d2
, тогда вы Знайте, что после выполнения этой инструкции %d2
будет содержать 66
. На языке более высокого уровня вы знаете, что написание x = 1; y = 2; z = x + y
приведет к , в результате чего z
будет 3
с уверенностью.
Это имеет смысл; мы не хотим задаваться вопросом, что будет делать дополнение, мы хотим, чтобы оно добавило . Однако это несовместимо с генерацией действительно случайных чисел. Для того, чтобы число было действительно случайным, должно быть абсолютно никоим образом , чтобы предсказать его, независимо от того, что вы знаете. Некоторые квантово-механические процессы имеют такое поведение точно, а другие естественные процессы достаточно близки к случайным, что для всех практических целей они есть (например, если они выглядят случайными и для их предсказания потребуется знание состояния каждой молекулы в атмосфере ). Тем не менее, компьютеры не могут этого сделать, потому что весь смысл наличия наличия компьютера состоит в том, чтобы иметь машину, которая детерминистически выполняет код. Вы должны быть в состоянии предсказать, что произойдет, когда вы запустите программы, иначе какой смысл?
В комментарии к Милан Рамая ответ , вы сказали
Я согласен с [yo] u, но все еще упускаю самую важную вещь - почему компьютеры не могут выдавать случайное число с предопределенным вводом?
Ответ выпадает прямо из определения действительно случайного числа. Поскольку действительно случайное число должно быть совершенно непредсказуемым, оно может никогда не зависеть от детерминированного ввода. Если у вас есть алгоритм, который принимает заранее определенные входные данные и использует его для получения псевдослучайного числа, вы можете дублировать этот процесс по желанию, лишь бы вы знали входные данные и алгоритм.
Вы также спросили
Может ли кто-нибудь дать объяснение тому, как современные языки программирования… справляются с ограничениями случайности и откуда эти ограничения… происходят.
Ну, как уже упоминалось выше, ограничения присущи детерминированному дизайну наших языков и машин, которые существуют по уважительным причинам (так что упомянутые языки и машины могут использоваться :-)). Предполагая, что вы не обращаетесь к чему-то, что имеет доступ к действительно случайным числам (таким как /dev/random
в системах, где это существует), используется следующий подход: использовать генератор псевдослучайных чисел. Эти алгоритмы предназначены для получения статистически случайной выходной последовательности , которая в формальном смысле выглядит непредсказуемой. Я не знаю достаточно статистики, чтобы объяснить или понять детали этого, но я полагаю, что идея состоит в том, что есть определенные числовые тесты, которые вы можете запустить, чтобы сказать, насколько хорошо ваши данные предсказывают себя (в некотором смысле) и тому подобное. Однако важным моментом является то, что, хотя последовательность является детерминированной, она «выглядит случайной». Для многих целей этого достаточно! И иногда это имеет свои преимущества: например, если вы хотите протестировать код, было бы неплохо иметь возможность указать начальное число и всегда получать его одинаковую последовательность псевдослучайных чисел.
ВТаким образом, общий ответ на ваш вопрос таков: поскольку мы хотим иметь возможность прогнозировать, что делают компьютеры, они не могут генерировать непредсказуемые числа (без специального оборудования). Языки программирования, как правило, не слишком подвержены этому влиянию, поскольку генераторы псевдослучайных чисел достаточны для большинства случаев.