2010-09-30 2 views
1

Можно создать дубликат:
True random number generatorСоздание абсолютно случайных чисел без случайной функции?

Я разговаривал с другом на днях, и мы пытались выяснить, если это возможно генерировать полностью случайные числа без помощи случайная функция? В C, например, «rand» генерирует псевдослучайные числа. Или мы можем использовать что-то вроде «srand (time (NULL))»; Это позволит компьютеру считывать числа из своих часов в качестве начальных значений. Поэтому, если я понимаю все, что я читал до сих пор, я уверен, что никакая случайная функция не производит действительно случайных чисел. Как написать программу, которая генерирует абсолютно случайные числа и что будет выглядеть код?

+1

См. [Википедия] (http://en.wikipedia.org/wiki/Pseudorandom_number_generator), в котором говорится: Роберт Р. Ковеу из Национальной лаборатории Ок-Ридж однажды назвал статью «Генерация случайных чисел слишком важна для быть оставлен на волю случая ». Как пошутил Джон фон Нейман: «Любой, кто рассматривает арифметические методы производства случайных цифр, конечно, находится в состоянии греха». –

+0

См .: http://en.wikipedia.org/wiki/Yarrow_algorithm и http://en.wikipedia.org/wiki/Fortuna_%28PRNG%29 –

ответ

1

Заканчивать этот вопрос: True random number generator

Кроме того, из записи Википедии на pseudorandom numbers

Как шутил Джон фон Нейман, «Тот, кто считает арифметическими методами получения случайных чисел, конечно, в состояние греха ».

+0

Тай ... посмотрел все, что не видел этого. – OpenBSDNinja

0

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

1

Сайт отличного random.org предоставляет аппаратные случайные числа, а также ряд программных интерфейсов для их извлечения.

Это может использоваться, например. для действительно непредсказуемых семян или для «истинных» случайных чисел. Являясь веб-сервисом, вы можете ограничить количество ничьих, которые вы можете сделать, поэтому не пытайтесь использовать это для своего обучения в школе monte carlo.

FWIW, я завернул один из этих интерфейсов в R package random.

+0

У Random.org много отличной информации. +1 для Дирка. http://www.random.org/randomness/ – dbasnett

1

простой способ сделать это с помощью цифр номера PI,

проверки эти статьи, если вы заинтересованы:

http://www.lbl.gov/Science-Articles/Archive/pi-random.html

http://news.uns.purdue.edu/html4ever/2005/050426.Fischbach.pi.html

обратите внимание, что это простой метод, но он имеет некоторые недостатки (есть некоторые известные рисунки в цифрах pi)

1

Это будет выглядеть так:

int random = CallHardwareRandomGenerator(); 

Даже с оборудованием случайность сложна.Есть вещи, которые являются физически случайными (атомный распад случайный, но с предсказуемыми средними суммами, так что его можно использовать как источник случайной информации) есть вещи, которые являются физически случайными, чтобы сделать предсказание непрактичным (так казино зарабатывают деньги).

Есть вещи, которые в значительной степени неопределенны (смешивать информацию с момента нажатия клавиши, движения мыши и т. Д.), Которые являются достаточно хорошим источником «случайности» для многих целей.

Математически мы не можем производить случайность, но мы можем улучшить распределение и сделать что-то более трудное для прогнозирования. Криптографические PRNG делают более сильную работу на этом, чем большинство, но более дорогие с точки зрения ресурсов.

0

Есть место для довольно философских дебатов о том, что действительно означает «действительно случайный». С практической точки зрения, даже источники, которые знают, не являются действительно случайными, могут быть использованы способами, которые производят то, что, вероятно, достаточно близко для практически любой практической цели, хотя (в частности, что, по крайней мере, с нынешней технологией, полное знание ранее обработанный бит-поток, по-видимому, недостаточен, чтобы точно предсказать следующий бит). Большинство из них действительно требуют немного дополнительного оборудования, хотя, например, довольно легко собрать источник из небольшого количества Americium из детектора дыма.

Есть еще немало источников, хотя они в основном довольно низкой пропускной способностью (например, собирают по одному биту для каждого нажатия клавиши, исходя из того, был ли интервал между нажатиями клавиш четным или нечетным числом тактовых импульсов ЦП) предполагая, что часы процессора и клавиатурные часы получены из отдельных кристаллов). OTOH, вы должны быть действительно осторожны с этим - большое количество дыр в безопасности (например, в Netscape около версии 4.0 или около того) проистекают из людей, полагающих, что такие источники были намного более случайными, чем они были на самом деле.

Хотя существует множество веб-сайтов, которые производят случайные числа из аппаратных источников, большинство из них бесполезны с точки зрения шифрования. Даже в лучшем случае вы просто доверяете своему SSL (или TLS) соединению, чтобы быть безопасным, чтобы никто не захватил данные, полученные с сайта.

Смежные вопросы