Сведения о вопросе

Kimsanov

16:03, 1st July, 2020

Теги

c#   c++   random    

Надежная Поколения Random Число

Просмотров: 440   Ответов: 5

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

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

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



  Сведения об ответе

lats

18:03, 1st July, 2020

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


  Сведения об ответе

lourence

18:03, 1st July, 2020

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


  Сведения об ответе

JUST___

18:03, 1st July, 2020

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

Как уже упоминали другие люди, классы Boost random-это хорошее начало. Их реализация соответствует коду 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


  Сведения об ответе

FAriza

18:03, 1st July, 2020

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

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

#include <random>


  Сведения об ответе

JUST___

18:03, 1st July, 2020

Boost.Random - это мой первый выбор для RNG

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться