Название подводит итог. Мне интересно знать, существует ли алгоритм, способный производить переменные выходные данные при одинаковом вводе, не полагаясь на другие источники случайности, такие как DateTime.Now или число, сгенерированное датчиком освещенности и т. Д. Кроме того, алгоритм не может быть запущен в последовательности, только два отличных, не связанных прогона, которые производят различный результат.
10
2.0 + 2.0
по такой системе не даст идентичных результатов. Ему не нужен другой источник случайности.Ответы:
Нет, это принципиально невозможно, потому что само определение алгоритма состоит в том, что он четко определен и детерминирован, то есть, если один и тот же вход всегда будет давать один и тот же результат. Существуют рандомизированные алгоритмы, но они требуют случайности в качестве входных данных.
Кроме того, детерминизм наиболее важная цель дизайна компьютерного оборудования. Процессор, который не выдает одинаковый вывод при одинаковом вводе, будет совершенно бесполезным для большинства целей.
источник
Нет, алгоритм генерации псевдослучайных чисел всегда будет выдавать один и тот же результат при одном и том же начальном числе (следовательно, псевдослучайном ).
Мне интересно, что вы использовали термин «алгоритм», а не «программа». Это исключает определенный класс ответов «да» (программные ошибки в ОЗУ, различные чередования потоков в многопоточном RNG и т. Д.). Если вы принимаете как должное, что каждый прогон вашего алгоритма принимает один и тот же вход на каждой итерации, хорошо заданный без случайности, то он будет генерировать один и тот же вывод при каждом прогоне.
При этом даже такие базовые вещи, как температура процессора, достаточно непредсказуемы, чтобы действовать в качестве источника энтропии, если они нормализованы соответствующим образом. Итак, не думайте, что это подразумевает, что «криптографически безопасный» генератор случайных чисел может быть предсказан, если вы знаете, во сколько он был запущен; многие из них используют генерируемые системой энтропийные потоки.
источник
Знаете ли вы, что люди работают очень усердно, чтобы гарантировать, что при одном и том же семени каждый раз генерируется одна и та же последовательность случайных чисел? Это желательное свойство для таких вещей, как моделирование по методу Монте-Карло, так как это означает, что результаты полностью воспроизводимы. Если вы не укажете начальное число, будет использовано что-то вроде времени, но эта точная воспроизводимость действительно нужна.
Единственные RNG, где это действительно нежелательно, это те, которые используются для криптографии, и те, как правило, достигают этого, используя собственный источник случайных чисел операционной системы (который не перематывается при нормальных обстоятельствах и который может использовать причудливое оборудование), чтобы обеспечить их начальное значение.
источник
Я полагаю, что если вы реализовали алгоритм на разных аппаратных платформах и использовали такие методы, как извлечение средних N битов из целого числа, вы могли бы получить разные ответы, если бы целочисленное кодирование было другим (большой / маленький / средний-порядковый номер). Вы также можете столкнуться с проблемами, возникающими на машинах с FPU, по сравнению с теми, которые не возникают, если вы манипулируете числами с плавающей запятой. Вероятно, не проблема на компьютерах настольного класса, но может быть проблема на телефонах.
источник