Ответ 1
Для С++ Boost.Random, вероятно, то, что вы ищете. Он поддерживает MT (среди многих других алгоритмов) и может собирать энтропию через класс nondet_random
. Проверьте это!: -)
Я ищу эффективный, разумно надежный RNG без использования специального оборудования. Он может использовать математические методы (Mersenne Twister и т.д.), Он может "собирать энтропию" с машины, независимо от того. В Linux/etc мы имеем drand48()
, который генерирует 48 случайных бит. Мне нужна аналогичная функция/класс для С++ или С#, которая может генерировать более 32 бит случайности, а младшие разряды одинаково случайны, как старшие разряды.
Он не должен быть криптографически безопасным, но он не должен использоваться или основываться на C-языке rand()
или .NET System.Random
.
Любой исходный код, ссылки на источник и т.д. будут оценены! В противном случае, какой ТИП RNG я должен искать?
Для С++ Boost.Random, вероятно, то, что вы ищете. Он поддерживает MT (среди многих других алгоритмов) и может собирать энтропию через класс nondet_random
. Проверьте это!: -)
Научная библиотека Gnu (GSL) имеет довольно обширный набор генераторов RN, тестовых жгутов и т.д. Если вы работаете в Linux, он, вероятно, уже доступен в вашей системе.
Следите за научной библиотекой Гну. Он лицензирован под 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
С++ 11 использует надежную библиотеку случайных чисел, основанную на boost.random. Вы можете получить доступ к ряду двигателей с произвольными номерами, используя различные алгоритмы для удовлетворения ваших требований к качеству, скорости или размеру. Качественные реализации даже обеспечат доступ к независимому нерегулярному RNG, предлагаемому вашей платформой через std::random_device
.
Кроме того, существует множество адаптеров для создания конкретных дистрибутивов, что устраняет необходимость делать такие манипуляции вручную (что-то часто делается неправильно).
Boost.Random
- мой первый выбор для RNG