Подтвердить что ты не робот

Надежное генерирование случайных чисел

Я ищу эффективный, разумно надежный RNG без использования специального оборудования. Он может использовать математические методы (Mersenne Twister и т.д.), Он может "собирать энтропию" с машины, независимо от того. В Linux/etc мы имеем drand48(), который генерирует 48 случайных бит. Мне нужна аналогичная функция/класс для С++ или С#, которая может генерировать более 32 бит случайности, а младшие разряды одинаково случайны, как старшие разряды.

Он не должен быть криптографически безопасным, но он не должен использоваться или основываться на C-языке rand() или .NET System.Random.

Любой исходный код, ссылки на источник и т.д. будут оценены! В противном случае, какой ТИП RNG я должен искать?

4b9b3361

Ответ 1

Для С++ Boost.Random, вероятно, то, что вы ищете. Он поддерживает MT (среди многих других алгоритмов) и может собирать энтропию через класс nondet_random. Проверьте это!: -)

Ответ 2

Научная библиотека Gnu (GSL) имеет довольно обширный набор генераторов RN, тестовых жгутов и т.д. Если вы работаете в Linux, он, вероятно, уже доступен в вашей системе.

Ответ 3

Следите за научной библиотекой Гну. Он лицензирован под GPL, а не LGPL.

Как отмечали другие люди, случайные классы Boost - хорошее начало. Их реализация соответствует коду PRNG, предназначенному для TR1:

http://www.boost.org/doc/libs/1_35_0/libs/random/index.html http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html

Если у вас есть последняя версия компилятора g++, вы можете найти уже включенные библиотеки TR1

Ответ 4

С++ 11 использует надежную библиотеку случайных чисел, основанную на boost.random. Вы можете получить доступ к ряду двигателей с произвольными номерами, используя различные алгоритмы для удовлетворения ваших требований к качеству, скорости или размеру. Качественные реализации даже обеспечат доступ к независимому нерегулярному RNG, предлагаемому вашей платформой через std::random_device.

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

#include <random>