Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

Остерегайтесь Научной библиотеки Gnu.Он лицензируется по лицензии 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.

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

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

#include <random>

Boost.Random мой первый выбор для ГСЧ

http://www.boost.org/doc/libs/random

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top