Во-первых, просто для пояснения, любой алгоритм, который вы придумаете, будет генератором псевдослучайных чисел, а не генератором истинных случайных чисел.Поскольку вы будете создавать алгоритм (т.е. писать функцию, то есть создавать набор правил), генератор случайных чисел должен будет в конечном итоге повторить себя или сделать что-то подобное, что было бы неслучайным.
Примерыдействительно генераторы случайных чисел - это те, которые захватывают случайный шум от природы и оцифровывают его.К ним относятся:
http://www.fourmilab.ch/hotbits/
http://www.random.org/
Вы также можете купить физическое оборудование, которое генерирует белый шум (или некоторые другие средства на случайности) и записать его в цифровом виде:
http://www.lavarnd.org/
http://www.idquantique.com/true-random-number-generator/products-overview.html
http://www.araneus.fi/products-alea-eng.html
С точки зрения генераторов псевдослучайных чисел, самые простые для изучения (и те, которыесреднестатистический непрофессионал, вероятно, мог бы сделать это самостоятельно) линейные конгруэнтные генераторы 1023 *.К сожалению, это также некоторые из худших PRNG.
Некоторые рекомендации по определению, что такое хороший PRNG, включают:
- Периодичность (каков диапазон доступных чисел?)
- Последовательные числа (какова вероятность того, что одно и то же число будет повторяться дважды подряд)
- Однородность (Вероятность того, что числа из определенного поддиапазона столь же высоки, как и из другого поддиапазона)
- Сложность обратного инжиниринга (если он близок к действительно случайному, то кто-то не сможет выяснить следующее число, которое он сгенерирует, основываясь на нескольких последних сгенерированных числах)
- Скорость(Как быстро я могу сгенерировать новый номер? Требуется ли 5 или 500 арифметических операций)
- Я уверен, что есть другие, которые мне не хватает
Один из самых популярныхпрямо сейчас, что считается хорошим в большинстве приложений (то есть не crptography) является Mersenne Twister .Как видно из ссылки, это простой алгоритм, возможно, всего 30 строк кода.Однако попытка придумать эти 20 или 30 строк кода с нуля требует больших усилий и изучения PRNG.Обычно самые известные алгоритмы разрабатываются профессором или отраслевым профессионалом, который десятилетиями изучал PRNG.
Я надеюсь, что вы изучаете PRNG и пробуете свои собственные (попробуйте Knuth's Art of Computer Programming или Численные рецептыстартовое место), но я просто хотел изложить все это так, чтобы в конце дня (если PRNG не будут делом вашей жизни), гораздо лучше просто использовать что-то, что придумал кто-то другой.Кроме того, я хотел бы отметить, что исторически компиляторы, электронные таблицы и т. Д. Не используют то, что большинство математиков считают хорошими PRNG, поэтому, если вам нужна высококачественная PRNG, не используйте стандартную библиотеку.в C ++, Excel, .NET, Java и т. д., пока вы не исследуете, с чем они его реализуют.