Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Reference

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 30. Boost.Random

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Случайные числа необходимы в ряде различных проблемных доменов, таких как:

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

Библиотека генераторов случайных чисел Boost предоставляет основу для генераторов случайных чисел с четко определенными свойствами, чтобы генераторы могли использоваться в требовательных числовых и защитных доменах. Для общего введения в случайные числа в цифрах см.

«Численные рецепты в C: Искусство научных вычислений», Уильям Х. Нажми, Saul A. Teukolsky, William A. Vetterling, Brian P. Flannery, 2nd ed., 1992, pp.

В зависимости от требований проблемной области уместны различные вариации генераторов случайных чисел:

  • недетерминированный генератор случайных чисел
  • генератор псевдослучайных чисел
  • квазислучайный генератор чисел

Все вариации имеют некоторые общие свойства, понятия (в смысле STL) называютсяUniformRandomNumberGenerator.. Эта концепция будет определена в следующем разделе.

Цели этой библиотеки следующие:

  • позволяет легко интегрировать сторонние генераторы случайных чисел
  • Предоставить простые в использовании интерфейсные классы, которые моделируют популярные дистрибутивы
  • обеспечить максимальную эффективность

Единый генератор случайных чисел обеспечивает последовательность случайных чисел, равномерно распределенных в заданном диапазоне. Диапазон может быть фиксированным или доступным (только) после выполнения строительства объекта.

узкая нижняя границанекоторого (конечного) множества S является (уникальным) членом l в S, так что для всех v в S, l< = v удерживает. Аналогично,плотная верхняя границанекоторого (конечного) множества S является (уникальным) членом u в S, так что для всех v в S, v< = u удерживает.

В следующей таблице X обозначает число генераторного класса возвращающихся объектов типа T, а v — конст-значение X.

Table 30.1. UniformRandomNumberGenerator requirements

выражение

Тип возврата

пред-/пост-условие

X::результат_тип

Т

std::числовые ограничения<T>::специализировалсяявляетсяистинным,TявляетсяМенее сравнимым

u.оператор()

Т

-

противмин

Т

жесткая нижняя граница на множестве всех значений, возвращаемых оператором(). Обратное значение этой функции не изменяется в течение срока службы объекта.

v.max[]

Т

, еслиstd::числовые_лимиты<T>::является_целым, тугой верхней границей на множестве всех значений, возвращаемыхоператором, в противном случае наименьшее репрезентабельное число больше тугой верхней границы на множестве всех значений, возвращаемых оператором(]. В любом случае, обратная величина этой функции не должна изменяться в течение срока службы объекта.


Функции членамин,максиоператора[]должны иметь амортизированную постоянную временную сложность.

[Note] Note

Для целых генераторов (т.е. целыхT), сгенерированные значенияx[]<=x<=max[], для нецелых генераторовT, сгенерированные значенияxмин<=max.

Обоснование: Описание диапазона с min и max служит двум целям. Во-первых, он позволяет масштабировать значения до некоторого канонического диапазона, такого как [0,1]. Во-вторых, он описывает значительные биты значений, которые могут быть актуальны для дальнейшей обработки.

Диапазон представляет собой закрытый интервал [min,max] для целых чисел, поскольку базовый тип может не представлять полуоткрытый интервал [min,max+1). Это полуоткрытый интервал [min, max] для неинтеграторов, потому что это гораздо более практично для пограничных случаев непрерывного распределения.

[Note] Note

КонцепцияUniformRandomNumberGeneratorне требуетоператора()длинногои, таким образом, не удовлетворяет требованиямRandomNumberGenerator(std:25.2.11 [lib.alg.random.shuffle]). Для этого используйте адаптерrandom_number_generator.

Обоснование:оператор()длинный]не предусмотрен, поскольку отображение выхода некоторого генератора с целым диапазоном до другого целого диапазона не тривиально.

Недетерминированный однородный генератор случайных чисел — этоUniformRandomNumberGenerator, который основан на некотором стохастическом процессе. Таким образом, он обеспечивает последовательность действительно случайных чисел. Примерами таких процессов являются ядерный распад, шум диода Зенера, туннелирование квантовых частиц, прокатка кристалла, извлечение из урны и бросание монеты. В зависимости от окружения, время межприбытия сетевых пакетов или событий на клавиатуре может быть близким приближением стохастических процессов.

Классrandom_deviceявляется моделью для недетерминированного генератора случайных чисел.

[Note] Note

Этот тип генератора случайных чисел полезен для приложений безопасности, где важно предотвратить угадывание номеров внешним злоумышленником и таким образом получить ключ шифрования или аутентификации. Таким образом, модели этой концепции должны быть осторожны, чтобы не утечка какой-либо информации, насколько это возможно окружающей средой. Например, может быть целесообразно четко очистить любое временное хранилище, как только оно больше не требуется.

Генератор псевдослучайных чисел представляет собойUniformRandomNumberGenerator, который обеспечивает детерминированную последовательность псевдослучайных чисел, основанную на некотором алгоритме и внутреннем состоянии.Линейные конгруэнтныеиинверсивные конгруэнтныегенераторы являются примерами такихгенераторов псевдослучайных чисел. Часто эти генераторы очень чувствительны к своим параметрам. Чтобы предотвратить использование неправильных реализаций, внешний испытуемый должен проверить, что генерируемая последовательность и предоставленное значение валидации действительно совпадают.

Дональд Э. Кнут дает обширный обзор псевдослучайной генерации чисел в своей книге «Искусство компьютерного программирования, том 2, 3-е издание, Аддисон-Уэсли, 1997». В описаниях конкретных генераторов содержатся дополнительные ссылки.

[Note] Note

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

В дополнение к требованиямUniformRandomNumberGeneratorгенератор псевдослучайных чисел имеет некоторые дополнительные требования. В следующей таблицеXобозначает класс генератора псевдослучайных чисел,uявляется значениемX,iявляется значением интегрального типа,sявляется значением типа, который моделируетSeedSeqиjзначение типадлинноедлинноедлинноедлинное.

Table 30.2. PseudoRandomNumberGenerator requirements

выражение

Тип возврата

пред-/пост-условие

X[]

-

создает генератор с семенем по умолчанию.

Xi

-

создает генератор, засеивающий его целым числомi

.

Xs

-

создает генератор, устанавливающий его начальное состояние изSeedSeqs

.

усемя[...]

пустота

устанавливает, что текущее состояние идентично состоянию, которое было бы создано соответствующим конструктором.

u.выброситьj

пустота

Продвигает генератор поjшагам, как если бы поjвызываетu[]

.

Классы, моделирующие генератор псевдослучайных чисел, должны также моделироватьРавенствоСравнимое, т.е. реализовыватьоператора==. Два генератора псевдослучайных чисел определены какэквивалент, если они оба возвращают идентичную последовательность чисел, начиная с данного состояния.

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

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

Классыrand48,minstd_randиmt19937являются моделями для генератора псевдослучайных чисел.

[Note] Note

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

SeedSeq представляет собой последовательность значений, которые могут быть использованы для установки начального состояния. PseudoRandomNumberGenerator.iиjявляются итераторами случайного доступа, значение_типакоторых является неподписанным целым типом с по меньшей мере 32 битами.

Table 30.3. SeedSeq requirements

выражение

Тип возврата

пред-/пост-условие

сложность

s.генерируютi,j

Пустота

сохраняет 32-битные значения для всех элементов в диапазоне итераторов, определяемомiиj

О(j - i)


Классseed_seqи каждыйUniformRandomNumberGenerator, предоставляемый библиотекой, являются моделямиSeedSeq.

Случайное распределение производит случайные числа, распределенные в соответствии с некоторым распределением, заданные равномерно распределенные случайные значения в качестве входных данных. В следующей таблицеXобозначает случайный класс распределения возвращающихся объектов типаT,uявляется значениемX,xиуX,Pявляется парам_типомраспределения,pявляется значениемP, аeявляется значением произвольного типа, которое удовлетворяет требованиямUniformRandomNumberGenerator

Table 30.4. Random distribution requirements (in addition to CopyConstructible, and Assignable)

выражение

Тип возврата

пред-/пост-условие

сложность

X::результат_тип

Т

-

время компиляции

X::param_type

P

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

время компиляции

Xp

X

Инициализирует распределение по своим параметрам

О (размер государства)

u.сброс[]

пустота

последующее использованиеuне зависит от значений, произведенных любым двигателем до вызовасброса

.

постоянная

ue

Т

последовательность чисел, возвращаемых последовательными вызовами с одним и тем же объектомe, случайным образом распределяется с функцией плотности вероятности распределения

амортизированное постоянное число вызовови

ue,p

Т

Эквивалент X(p)(e), но может использовать другую (и, предположительно, более эффективную) реализацию

амортизированное постоянное число вызововe+ O (размер состояния)

x.парам

P

Возвращает параметры распределения

О (размер государства)

x.парамp

Пустота

Устанавливает параметры распределения

О (размер государства)

x.мин

Т

возвращает минимальное значение распределения

постоянная

x.max

Т

возвращает максимальное значение распределения

постоянная

x==у

bool

Указывает, будут ли два распределения производить одинаковые последовательности случайных вариаций, если даны равные генераторы

О (размер государства)

x!=у

bool

!x==у

О (размер государства)

os<<x

std::ostream&

пишет текстовое представление для параметров и дополнительных внутренних данных распределенияxдоos. пост:os.fmtflagsи символ заполнения неизменны.

О (размер государства)

>>u

std::istream&

восстанавливает параметры и дополнительные внутренние данные распределенияu. pre:являетсяобеспечивает текстовое представление, которое ранее было написанооператором<<пост:является.fmtflagsявляются неизменными.

О (размер государства)


Дополнительные требования: Последовательность чисел, произведенных повторными вызовамиxe, не изменяется, вызывается лиos<<xxe. Если текстовое представление написано с использованиемosxи это представление восстановлено в том же или другом объектетого же типа с использованиемy, повторные вызовыyпроизводят ту же последовательность случайных чисел, что и повторные вызовыx.

Эта библиотека содержит несколькогенераторов псевдослучайных чисел. Качество генератора 1036 псевдослучайных чисел 1037 в решающей степени зависит как от алгоритма, так и от его параметров. Эта библиотека реализует алгоритмы в виде шаблонов классов с параметрами значений шаблонов, скрытых впространстве именбустере::случайно. Любой конкретный выбор параметров представлен как соответствующим образом специализирующийсятипдефвпространстве именусилитель.

Генераторы псевдослучайных чиселне должны часто конструироваться (инициализироваться) во время выполнения программы по двум причинам. Во-первых, инициализация требует полной инициализации внутреннего состояния генератора. Таким образом, генераторы с большим внутренним состоянием (см. Ниже) являются дорогостоящими для инициализации. Во-вторых, инициализация всегда требует некоторого значения, используемого в качестве «семени» для генерируемой последовательности. Обычно трудно получить несколько хороших значений семян. Например, одним из способов получения семян является определение текущего времени при максимальном доступном разрешении, например, микросекунд или наносекунд. Когдагенератор псевдослучайных чиселснова инициализируется с токовым временем в качестве семени, вполне вероятно, что это находится на почти постоянном (неслучайном) расстоянии от времени, данного в качестве семени для первой инициализации. Расстояние может быть равным нулю, если разрешение часов низкое, поэтому генератор повторяет одну и ту же последовательность случайных чисел. Для некоторых приложений это неуместно.

Обратите внимание, что всегенераторы псевдослучайных чисел, описанные ниже, являютсяCopyConstructibleиAssignable. Копирование или назначение генератора будет копировать все его внутреннее состояние, поэтому оригинал и копия будут генерировать идентичную последовательность случайных чисел. Зачастую такое поведение нежелательно. В частности, остерегайтесь алгоритмов из стандартной библиотеки, таких какstd::генерировать. Они принимают аргумент функтора по значению, тем самым вызывая конструктора копий при вызове.

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

Table 30.5. generators

генератор

продолжительность цикла

Требования к памяти

Скорость по сравнению с самой быстрой

комментарий

minstd_rand0

231-2

размерint32_t

16%

-

minstd_rand

231-2

размерint32_t

16%

-

rand48

248-1

размерuint64_t

64%

-

ecuyer1988

прим. 261

2*размерint32_t

7%

-

knuth_b

?

257*размерuint32_t

12%

-

kreutzer1986

?

98*размерuint32_t

37%

-

taus88

~288

3*размерuint32_t

100%

-

Hellekalek1995

231-1

размерint32_t

2%

хорошее равномерное распределение в нескольких измерениях

mt11213b

211213-1

352*размерuint32_t

100%

хорошее равномерное распределение до 350 измерений

mt19937

219937-1

625*размер[uint32_t]

93%

хорошее равномерное распределение до 623 измерений

mt19937_64

219937-1

312*размерuint64_t

38%

хорошее равномерное распределение до 311 измерений

lagged_fibonacci607

~232000

607*размердвойной

59%

-

lagged_fibonacci1279

~267000

1279*размердвойной

59%

-

lagged_fibonacci2281

~2120000

2281*размердвойной

61%

-

lagged_fibonacci3217

~2170000

3217*размердвойной

62%

-

lagged_fibonacci4423

~2230000

4423*размердвойной

59%

-

lagged_fibonacci9689

~2510000

9689*размердвойной

61%

-

lagged_fibonacci19937

~21050000

19937*размердвойной

59%

-

lagged_fibonacci23209

~21200000

23209*размердвойной

61%

-

lagged_fibonacci44497

~22300000

44497*размердвойной

59%

-

ranlux3

~10171

24*размерint

5%

-

ranlux4

~10171

24*размерint

3%

-

ranlux64_3

~10171

24*размерint64_t

5%

-

ranlux64_4

~10171

24*размерint64_t

3%

-

ranlux3_01

~10171

24*размерплавающий

5%

-

ranlux4_01

~10171

24*размерплавающий

3%

-

ranlux64_3_01

~10171

24*размердвойной

5%

-

ranlux64_4_01

~10171

24*размердвойной

3%

-

ranlux24

~10171

24*размерuint32_t

5%

-

ranlux48

~10171

12*размерuint64_t

3%

-


Как видно из таблицы, при выборе генератора случайных чисел обычно определяется компромисс между качеством/производительностью/памятью. Множество генераторов, представленных в этой библиотеке, позволяет программисту оптимизировать компромисс в отношении его области приложения. Кроме того, использование нескольких принципиально разных генераторов случайных чисел для данного применения моделирования Монте-Карло повысит уверенность в результатах.

Если названия генераторов не звонят, и вы не знаете, какой генератор использовать, разумно использоватьmt19937для начала: Он быстрый и имеет приемлемое качество.

[Note] Note

Эти генераторы случайных чисел не предназначены для использования в приложениях, где требуются недетерминированные случайные числа. См.random_deviceдля выбора (надеюсь) недетерминированных генераторов случайных чисел.

В дополнение к генераторам случайных чисел (1966) (1967) эта библиотека предоставляет функции распределения, которые отображают одно распределение (часто однородное распределение, предоставляемое одним генератором) в другое.

Обычно существует несколько возможных реализаций любого заданного отображения. Часто есть выбор между использованием большего пространства, большим количеством вызовов основного источника случайных чисел или более трудоемкой арифметикой, такой как тригонометрические функции. Это описание интерфейса не требует какой-либо конкретной реализации. Однако реализации, которые не могут достичь определенных значений указанного распределения или иным образом не сходятся с ним статистически, неприемлемы.

Table 30.6. Uniform Distributions

распределение

объяснение

пример

uniform_smallint

дискретное равномерное распределение на небольшом наборе целых чисел (намного меньше, чем диапазон базового генератора)

Рисунок из урны

uniform_int_distribution

дискретное равномерное распределение на наборе целых чисел; базовый генератор может быть вызван несколько раз, чтобы собрать достаточно случайности для вывода

Рисунок из урны

униформа_01

непрерывное равномерное распределение по диапазону [0,1); важная основа для других распределений

-

uniform_real_distribution

непрерывное равномерное распределение по некоторому диапазону [мин, макс] реальных чисел

для диапазона [0, 2pi]: случайное падение палки и измерение ее угла в радианах (при условии равномерного распределения угла)


Table 30.7. Bernoulli Distributions

распределение

объяснение

пример

bernoulli_distribution

Эксперимент Бернулли: дискретное булевое распределение с настраиваемой вероятностью

бросание монеты (p=0,5)

Биномиал_распределение

подсчитывает результаты повторных экспериментов Бернулли

бросает монету 20 раз и подсчитывает, сколько передних сторон показано

Геометрическое распределение

измеряет расстояние между результатами повторных экспериментов Бернулли

несколько раз бросать дробь и подсчитывать количество попыток, пока впервые не появится «6»

negative_binomial_distribution

Подсчитывает количество неудач повторных экспериментов Бернулли, необходимых для получения некоторого постоянного числа успехов.

подбрасывая монету и подсчитывая количество голов, которые появляются, прежде чем мы получим 3 хвоста


Table 30.8. Poisson Distributions

распределение

объяснение

пример

poisson_distribution

Распределение пуассонов

подсчет количества альфа-частиц, испускаемых радиоактивным веществом в фиксированный период времени

Экспоненциальное_распределение

Экспоненциальное распределение

измерение межприбыльного времени альфа-частиц, испускаемых радиоактивным веществом

гамма_распределение

Гамма распределение

-

гиперэкспоненциальное_распределение

Гиперэкспоненциальное распределение

время обслуживания k-параллельных серверов с заданной скоростью обслуживания и вероятностью выбора

weibull_distribution

дистрибуция Weibull

-

Extreme_value_distribution

Экстремальное распределение значений

-

бета_распределение

бета-распределение

-

laplace_distribution

распределение места

-


Table 30.9. Normal Distributions

распределение

объяснение

пример

нормальное распределение

подсчитывает результаты (бесконечно) повторных экспериментов Бернулли

бросая монету 10000 раз и считая, сколько передних сторон показано

lognormal_distribution

логнормальное распределение (иногда используется в симуляциях)

измерение времени завершения работы работника сборочной линии

chi_squared_distribution

Ши-квадратное распределение

-

non_central_chi_squared_distribution

нецентральное ци-квадратное распределение

-

cauchy_distribution

Распределение Коши

-

Рыбак_f_распределение

Распределение Фишера F

-

Student_t_distribution

Распределение учащихся

-


Table 30.10. Sampling Distributions

распределение

объяснение

пример

дискретное_распределение

дискретное распределение со специфическими вероятностями

Несправедливая смерть

piecewise_constant_distribution

-

-

piecewise_linear_distribution

-

-


Table 30.11. Miscellaneous Distributions

распределение

объяснение

пример

треугольник_распределение

Треугольное распределение

-

uniform_on_sphere

равномерное распределение на единичной сфере произвольного измерения

выбор случайной точки на Земле (предполагается сферой), где провести следующие каникулы


Table 30.12. Utilities

Имя

Описание

seed_seq

Используется для созданияСлучайных двигателей

random_number_generator

ПриспособляетPseudoRandomNumberGeneratorдля работы со std::random_shuffle

генерировать_canonical

Производит случайные значения с плавающей точкой с определенной точностью.


Headers

Header <boost/random/additive_combine.hpp>
Header <boost/random/bernoulli_distribution.hpp>
Header <boost/random/beta_distribution.hpp>
Header <boost/random/binomial_distribution.hpp>
Header <boost/random/cauchy_distribution.hpp>
Header <boost/random/chi_squared_distribution.hpp>
Header <boost/random/discard_block.hpp>
Header <boost/random/discrete_distribution.hpp>
Header <boost/random/exponential_distribution.hpp>
Header <boost/random/extreme_value_distribution.hpp>
Header <boost/random/fisher_f_distribution.hpp>
Header <boost/random/gamma_distribution.hpp>
Header <boost/random/generate_canonical.hpp>
Header <boost/random/geometric_distribution.hpp>
Header <boost/random/hyperexponential_distribution.hpp>
Header <boost/random/independent_bits.hpp>
Header <boost/random/inversive_congruential.hpp>
Header <boost/random/lagged_fibonacci.hpp>
Header <boost/random/laplace_distribution.hpp>
Header <boost/random/linear_congruential.hpp>
Header <boost/random/linear_feedback_shift.hpp>
Header <boost/random/lognormal_distribution.hpp>
Header <boost/random/mersenne_twister.hpp>
Header <boost/random/negative_binomial_distribution.hpp>
Header <boost/random/non_central_chi_squared_distribution.hpp>
Header <boost/random/normal_distribution.hpp>
Header <boost/random/piecewise_constant_distribution.hpp>
Header <boost/random/piecewise_linear_distribution.hpp>
Header <boost/random/poisson_distribution.hpp>
Header <boost/random/random_device.hpp>
Header <boost/random/random_number_generator.hpp>
Header <boost/random/ranlux.hpp>
Header <boost/random/seed_seq.hpp>
Header <boost/random/shuffle_order.hpp>
Header <boost/random/student_t_distribution.hpp>
Header <boost/random/subtract_with_carry.hpp>
Header <boost/random/taus88.hpp>
Header <boost/random/traits.hpp>
Header <boost/random/triangle_distribution.hpp>
Header <boost/random/uniform_01.hpp>
Header <boost/random/uniform_int_distribution.hpp>
Header <boost/random/uniform_on_sphere.hpp>
Header <boost/random/uniform_real_distribution.hpp>
Header <boost/random/uniform_smallint.hpp>
Header <boost/random/variate_generator.hpp>
Header <boost/random/weibull_distribution.hpp>
Header <boost/random/xor_combine.hpp>
namespace boost {
  namespace random {
    template<typename MLCG1, typename MLCG2> class additive_combine_engine;
    typedef additive_combine_engine< linear_congruential_engine< uint32_t, 40014, 0, 2147483563 >, linear_congruential_engine< uint32_t, 40692, 0, 2147483399 >> ecuyer1988;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class bernoulli_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class beta_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename IntType = int, typename RealType = double> 
      class binomial_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class cauchy_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class chi_squared_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename UniformRandomNumberGenerator, std::size_t p, 
             std::size_t r> 
      class discard_block_engine;
  }
}
namespace boost {
  namespace random {
    template<typename IntType = int, typename WeightType = double> 
      class discrete_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class exponential_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class extreme_value_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class fisher_f_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class gamma_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType, std::size_t bits, typename URNG> 
      RealType generate_canonical(URNG &);
  }
}
namespace boost {
  namespace random {
    template<typename IntType = int, typename RealType = double> 
      class geometric_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealT = double> class hyperexponential_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename Engine, std::size_t w, typename UIntType> 
      class independent_bits_engine;
  }
}
namespace boost {
  namespace random {
    template<typename IntType, IntType a, IntType b, IntType p> 
      class inversive_congruential_engine;
    typedef inversive_congruential_engine< uint32_t, 9102, 2147483647-36884165, 2147483647 > hellekalek1995;
  }
}
namespace boost {
  namespace random {
    template<typename UIntType, int w, unsigned int p, unsigned int q> 
      class lagged_fibonacci_engine;
    template<typename RealType, int w, unsigned int p, unsigned int q> 
      class lagged_fibonacci_01_engine;
    typedef lagged_fibonacci_01_engine< double, 48, 607, 273 > lagged_fibonacci607;
    typedef lagged_fibonacci_01_engine< double, 48, 1279, 418 > lagged_fibonacci1279;
    typedef lagged_fibonacci_01_engine< double, 48, 2281, 1252 > lagged_fibonacci2281;
    typedef lagged_fibonacci_01_engine< double, 48, 3217, 576 > lagged_fibonacci3217;
    typedef lagged_fibonacci_01_engine< double, 48, 4423, 2098 > lagged_fibonacci4423;
    typedef lagged_fibonacci_01_engine< double, 48, 9689, 5502 > lagged_fibonacci9689;
    typedef lagged_fibonacci_01_engine< double, 48, 19937, 9842 > lagged_fibonacci19937;
    typedef lagged_fibonacci_01_engine< double, 48, 23209, 13470 > lagged_fibonacci23209;
    typedef lagged_fibonacci_01_engine< double, 48, 44497, 21034 > lagged_fibonacci44497;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class laplace_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename IntType, IntType a, IntType c, IntType m> 
      class linear_congruential_engine;
    class rand48;
    typedef linear_congruential_engine< uint32_t, 16807, 0, 2147483647 > minstd_rand0;
    typedef linear_congruential_engine< uint32_t, 48271, 0, 2147483647 > minstd_rand;
  }
}
namespace boost {
  namespace random {
    template<typename UIntType, int w, int k, int q, int s> 
      class linear_feedback_shift_engine;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class lognormal_distribution;
  }
}
BOOST_RANDOM_MERSENNE_TWISTER_DISCARD_THRESHOLD
namespace boost {
  namespace random {
    template<typename UIntType, std::size_t w, std::size_t n, std::size_t m, 
             std::size_t r, UIntType a, std::size_t u, UIntType d, 
             std::size_t s, UIntType b, std::size_t t, UIntType c, 
             std::size_t l, UIntType f> 
      class mersenne_twister_engine;
    typedef mersenne_twister_engine< uint32_t, 32, 351, 175, 19, 0xccab8ee7, 11, 0xffffffff, 7, 0x31b6ab00, 15, 0xffe50000, 17, 1812433253 > mt11213b;
    typedef mersenne_twister_engine< uint32_t, 32, 624, 397, 31, 0x9908b0df, 11, 0xffffffff, 7, 0x9d2c5680, 15, 0xefc60000, 18, 1812433253 > mt19937;
    typedef mersenne_twister_engine< uint64_t, 64, 312, 156, 31, 0xb5026f5aa96619e9ull, 29, 0x5555555555555555ull, 17, 0x71d67fffeda60000ull, 37, 0xfff7eee000000000ull, 43, 6364136223846793005ull > mt19937_64;
  }
}
namespace boost {
  namespace random {
    template<typename IntType = int, typename RealType = double> 
      class negative_binomial_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> 
      class non_central_chi_squared_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class normal_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double, typename WeightType = double> 
      class piecewise_constant_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class piecewise_linear_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename IntType = int, typename RealType = double> 
      class poisson_distribution;
  }
}
namespace boost {
  namespace random {
    class random_device;
  }
}
namespace boost {
  namespace random {
    template<typename URNG, typename IntType = long> 
      class random_number_generator;
  }
}
namespace boost {
  namespace random {
    typedef subtract_with_carry_engine< uint32_t, 24, 10, 24 > ranlux_base;
    typedef subtract_with_carry_01_engine< float, 24, 10, 24 > ranlux_base_01;
    typedef subtract_with_carry_01_engine< double, 48, 10, 24 > ranlux64_base_01;
    typedef discard_block_engine< ranlux_base, 223, 24 > ranlux3;
    typedef discard_block_engine< ranlux_base, 389, 24 > ranlux4;
    typedef discard_block_engine< ranlux_base_01, 223, 24 > ranlux3_01;
    typedef discard_block_engine< ranlux_base_01, 389, 24 > ranlux4_01;
    typedef discard_block_engine< ranlux64_base_01, 223, 24 > ranlux64_3_01;
    typedef discard_block_engine< ranlux64_base_01, 389, 24 > ranlux64_4_01;
    typedef subtract_with_carry_engine< uint64_t, 48, 10, 24 > ranlux64_base;
    typedef discard_block_engine< ranlux64_base, 223, 24 > ranlux64_3;
    typedef discard_block_engine< ranlux64_base, 389, 24 > ranlux64_4;
    typedef subtract_with_carry_engine< uint32_t, 24, 10, 24 > ranlux24_base;
    typedef subtract_with_carry_engine< uint64_t, 48, 5, 12 > ranlux48_base;
    typedef discard_block_engine< ranlux24_base, 223, 23 > ranlux24;
    typedef discard_block_engine< ranlux48_base, 389, 11 > ranlux48;
  }
}
namespace boost {
  namespace random {
    class seed_seq;
  }
}
namespace boost {
  namespace random {
    template<typename UniformRandomNumberGenerator, std::size_t k> 
      class shuffle_order_engine;
    typedef shuffle_order_engine< linear_congruential_engine< uint32_t, 1366, 150889, 714025 >, 97 > kreutzer1986;
    typedef shuffle_order_engine< minstd_rand0, 256 > knuth_b;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class student_t_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename IntType, std::size_t w, std::size_t s, std::size_t r> 
      class subtract_with_carry_engine;
    template<typename RealType, std::size_t w, std::size_t s, std::size_t r> 
      class subtract_with_carry_01_engine;
  }
}
namespace boost {
  namespace random {
    typedef xor_combine_engine< xor_combine_engine< linear_feedback_shift_engine< uint32_t, 32, 31, 13, 12 >, 0, linear_feedback_shift_engine< uint32_t, 32, 29, 2, 4 >, 0 >, 0, linear_feedback_shift_engine< uint32_t, 32, 28, 3, 17 >, 0 > taus88;
  }
}
namespace boost {
  namespace random {
    namespace traits {
      template<typename T> struct make_unsigned;
      template<typename T> struct make_unsigned_or_unbounded;
      template<typename T> struct is_integral;
      template<typename T> struct is_signed;
    }
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class triangle_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class uniform_01;
  }
}
namespace boost {
  namespace random {
    template<typename IntType = int> class uniform_int_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double, 
             typename Cont = std::vector<RealType> > 
      class uniform_on_sphere;
  }
}
namespace boost {
  namespace random {
    template<typename RealType = double> class uniform_real_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename IntType = int> class uniform_smallint;
  }
}
namespace boost {
  template<typename Engine, typename Distribution> class variate_generator;
}
namespace boost {
  namespace random {
    template<typename RealType = double> class weibull_distribution;
  }
}
namespace boost {
  namespace random {
    template<typename URNG1, int s1, typename URNG2, int s2> 
      class xor_combine_engine;
  }
}

PrevUpHomeNext

Статья Reference раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 30. Boost.Random может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 30. Boost.Random ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:03:43/0.03997802734375/1