Случайные числа произвольной точности в C: генерация для моделирования Монте-Карло без атмосферного шума - PullRequest
3 голосов
/ 24 мая 2010

Я знаю, что есть другие вопросы, подобные этому, однако следующий вопрос относится к генерации случайных чисел произвольной точности в C для использования в моделировании Монте-Карло.

Как мы можем генерировать случайные числа произвольной точности хорошего качества в C, когда атмосферный шум не всегда доступен, не полагаясь на дисковый ввод-вывод или доступ к сети, которые могут создать узкие места?

libgmp способен генерировать случайные числа, но, , как и другие реализации генераторов псевдослучайных чисел , для требуется начальное число . Как упоминается в руководстве, «системное время довольно легко угадать, поэтому, если требуется непредсказуемость, оно определенно не должно быть единственным источником начального значения».

Существует ли переносимая / портированная библиотека для генерации случайных чисел или начальные числа для случайных чисел? В libgmp также упоминается, что «в некоторых системах есть специальное устройство / dev / random, которое предоставляет случайные данные, лучше подходящие для использования в качестве начального числа». Однако /dev/random и /dev/urandom могут только использоваться в * nix системах.

Ответы [ 3 ]

2 голосов
/ 25 мая 2010

Не переоценивайте важность семян.

Во-первых, он не должен быть действительно хаотичным - только для того, чтобы иметь хорошее распределение и не коррелировать с какими-либо процессами в вашей симуляции или псевдослучайном генераторе.

Во-вторых, для статистических характеристик Монте-Карло важна не случайность (в каком-либо смысле) определенного числа.

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

2 голосов
/ 24 мая 2010

По определению, истинные случайные числа требуют хаотической информации из реального мира. / dev / random часто (но не всегда) обеспечивает это. Другой вариант для * ix - Сбор энтропии Демоном . / dev / urandom по своему дизайну с радостью предоставит неслучайные данные, поскольку не блокируется при исчерпании пула энтропии.

Интернет-API, обеспечивающие это, включают HotBits (радиоактивный распад), * ​​1007 * LavaRnd (CCD) и Random.org (атмосферный шум, который я понимаю, что вы не хочу) См. Также Аппаратный генератор случайных чисел

Это устройство (без принадлежности) имеет драйверы для Windows и * ix.

0 голосов
/ 24 мая 2010

Почему ваше произвольное требование к точности?Не существует «случайного числа от 0 до бесконечности».Вам всегда нужен диапазон.

...