Альтернативные источники энтропии - PullRequest
12 голосов
/ 19 ноября 2008

Хорошо, я полагаю, что это совершенно субъективно, но я думал об источниках энтропии для генераторов случайных чисел. Получается, что большинство генераторов посеяно с текущим временем, верно? Что ж, мне было любопытно, какие другие источники могут быть использованы для генерации совершенно правильных, случайных чисел (свободного определения).

Будет ли использование нескольких источников (таких как время + текущее время поиска на жестком диске [мы здесь фантастически]) вместе создать «более случайное» число, чем один источник? Каковы логические пределы количества источников? Сколько на самом деле достаточно? Время выбрано просто потому, что это удобно?

Извините, если подобные вещи не разрешены, но мне любопытно, что за теория стоит за источниками.

Ответы [ 15 ]

0 голосов
/ 10 декабря 2009

Как насчет выделения потока, который будет манипулировать некоторой переменной в узком цикле в течение фиксированного промежутка времени, прежде чем он будет убит. То, что вы получите в итоге, будет зависеть от скорости процессора, загрузки системы и т. Д. Очень просто, но лучше, чем просто srand (время (NULL)) ...

0 голосов
/ 07 февраля 2009

Источник семян не так уж важен. Более важным является алгоритм генератора псевдо чисел. Однако некоторое время назад я слышал о создании семян для некоторых банковских операций. Они взяли много факторов вместе:

  • время
  • температура процессора
  • скорость вращения вентилятора
  • Напряжение процессора
  • Я не помню больше:)

Даже если некоторые из этих параметров не сильно меняются во времени, вы можете поместить их в хорошую функцию хеширования.

Как сгенерировать хорошее случайное число?

Может быть, мы можем учесть бесконечное число вселенных? Если это правда, что все время создаются новые параллельные вселенные, мы можем сделать что-то вроде этого:

int Random() {
    return Universe.object_id % MAX_INT;
}

В каждый момент мы должны находиться в другой ветви параллельных вселенных, поэтому у нас должен быть другой идентификатор. Единственная проблема заключается в том, как получить объект Вселенной:)

0 голосов
/ 07 февраля 2009

Не беспокойтесь о «хорошем» семени для генератора случайных чисел. Статистические свойства последовательности не зависят от того, как посеян генератор.

Я не согласен с советом Джона Д. Кука . Если вы затравите Mersenne Twister со всеми битами, установленными в ноль, кроме одного, он первоначально будет генерировать числа, которые не являются случайными. Генератору требуется много времени, чтобы превратить это состояние во все, что могло бы пройти статистические тесты. Простая установка первых 32 битов генератора в начальное число будет иметь аналогичный эффект. Кроме того, если все состояние установлено в ноль, генератор будет выдавать бесконечные нули.

Правильно написанный код RNG будет иметь правильно написанный алгоритм заполнения, который принимает, скажем, 64-битное значение и запускает генератор, чтобы он генерировал приличные случайные числа для каждого возможного ввода. Так что, если вы используете надежную библиотеку, подойдет любое семя. Но если вы взламываете собственную реализацию, вам нужно быть осторожным.

0 голосов
/ 19 ноября 2008

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

0 голосов
/ 19 ноября 2008

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

...