Карта сайта 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::result_type>

<T>

<std::numeric_limits<T>::is_specialized><true>,<T>Меньше сравнительный

<u.operator()()>

<T>

-

<v.min()>

<T>

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

<v.max()>

<T>

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


Функции членов<min>,<max>и<operator()>должны иметь амортизированную постоянную временную сложность.

[Note] Note

Для целых генераторов (т.е. целых<T>), генерируемые значения<x>выполняют<min() <=x <=max()>, для нецелых генераторов (т.е. нецелых<T>), генерируемые значения<x>выполняют<min()<=x<max()>.

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

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

[Note] Note

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

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

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

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

[Note] Note

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

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

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

[Note] Note

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

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

Table 30.2. PseudoRandomNumberGenerator requirements

выражение

Тип возврата

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

<X()>

-

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

<X(i)>

-

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

.

<X(s)>

-

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

.

<u.seed(...)>

<void>

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

<u.discard(j)>

<void>

Продвигает генератор<j>шагами, как будто<j>вызывает<u()>

.

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

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

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

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

[Note] Note

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

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

Table 30.3. SeedSeq requirements

выражение

Тип возврата

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

сложность

<s.generate(i, j)>

пустота

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

О(j - i)


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

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

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

выражение

Тип возврата

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

сложность

<X::result_type>

<T>

-

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

<X::param_type>

<P>

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

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

<X(p)>

<X>

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

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

<u.reset()>

<void>

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

.

постоянная

<u(e)>

<T>

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

амортизированное постоянное число обращений<e>

<u(e, p)>

<T>

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

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

<x.param()>

<P>

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

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

<x.param(p)>

пустота

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

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

<x.min()>

<T>

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

постоянная

<x.max()>

<T>

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

постоянная

<x== y>

<bool>

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

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

<x!= y>

<bool>

<!(x ==y)>

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

<os<< x>

<std::ostream&>

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

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

<is>> u>

<std::istream&>

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

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


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

Эта библиотека предоставляет несколькогенераторов псевдослучайных чисел. Качество генератора псевдослучайных чиселсущественно зависит как от алгоритма, так и от его параметров. Эта библиотека реализует алгоритмы в виде шаблонов классов с параметрами значений шаблонов, скрытыми в<namespace boost::random>. Любой конкретный выбор параметров представлен в качестве соответствующей специализации<typedef>в<namespaceboost>.

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

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

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

Table 30.5. generators

генератор

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

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

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

комментарий

<minstd_rand0>

231-2

<sizeof(int32_t)>

16%

-

<minstd_rand>

231-2

<sizeof(int32_t)>

16%

-

<rand48>

248-1

<sizeof(uint64_t)>

64%

-

<ecuyer1988>

прим. 261

<2*sizeof(int32_t)>

7%

-

<knuth_b>

?

<257*sizeof(uint32_t)>

12%

-

<kreutzer1986>

?

<98*sizeof(uint32_t)>

37%

-

<taus88>

~288

<3*sizeof(uint32_t)>

100%

-

<hellekalek1995>

231-1

<sizeof(int32_t)>

2%

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

<mt11213b>

211213-1

<352*sizeof(uint32_t)>

100%

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

<mt19937>

219937-1

<625*sizeof(uint32_t)>

93%

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

<mt19937_64>

219937-1

<312*sizeof(uint64_t)>

38%

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

<lagged_fibonacci607>

~232000

<607*sizeof(double)>

59%

-

<lagged_fibonacci1279>

~267000

<1279*sizeof(double)>

59%

-

<lagged_fibonacci2281>

~2120000

<2281*sizeof(double)>

61%

-

<lagged_fibonacci3217>

~2170000

<3217*sizeof(double)>

62%

-

<lagged_fibonacci4423>

~2230000

<4423*sizeof(double)>

59%

-

<lagged_fibonacci9689>

~2510000

<9689*sizeof(double)>

61%

-

<lagged_fibonacci19937>

~21050000

<19937*sizeof(double)>

59%

-

<lagged_fibonacci23209>

~21200000

<23209*sizeof(double)>

61%

-

<lagged_fibonacci44497>

~22300000

<44497*sizeof(double)>

59%

-

<ranlux3>

~10171

<24*sizeof(int)>

5%

-

<ranlux4>

~10171

<24*sizeof(int)>

3%

-

<ranlux64_3>

~10171

<24*sizeof(int64_t)>

5%

-

<ranlux64_4>

~10171

<24*sizeof(int64_t)>

3%

-

<ranlux3_01>

~10171

<24*sizeof(float)>

5%

-

<ranlux4_01>

~10171

<24*sizeof(float)>

3%

-

<ranlux64_3_01>

~10171

<24*sizeof(double)>

5%

-

<ranlux64_4_01>

~10171

<24*sizeof(double)>

3%

-

<ranlux24>

~10171

<24*sizeof(uint32_t)>

5%

-

<ranlux48>

~10171

<12*sizeof(uint64_t)>

3%

-


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

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

[Note] Note

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

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

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

Table 30.6. Uniform Distributions

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

объяснение

пример

<uniform_smallint>

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

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

<uniform_int_distribution>

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

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

<uniform_01>

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

-

<uniform_real_distribution>

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

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


Table 30.7. Bernoulli Distributions

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

объяснение

пример

<bernoulli_distribution>

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

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

<binomial_distribution>

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

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

.

<geometric_distribution>

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

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

<negative_binomial_distribution>

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

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


Table 30.8. Poisson Distributions

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

объяснение

пример

<poisson_distribution>

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

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

<exponential_distribution>

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

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

<gamma_distribution>

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

-

<hyperexponential_distribution>

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

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

<weibull_distribution>

распределение вейбулла

-

<extreme_value_distribution>

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

-

<beta_distribution>

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

-

<laplace_distribution>

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

-


Table 30.9. Normal Distributions

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

объяснение

пример

<normal_distribution>

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

.

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

<lognormal_distribution>

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

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

<chi_squared_distribution>

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

-

<non_central_chi_squared_distribution>

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

-

<cauchy_distribution>

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

-

<fisher_f_distribution>

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

-

<student_t_distribution>

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

-


Table 30.10. Sampling Distributions

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

объяснение

пример

<discrete_distribution>

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

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

<piecewise_constant_distribution>

-

-

<piecewise_linear_distribution>

-

-


Table 30.11. Miscellaneous Distributions

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

объяснение

пример

<triangle_distribution>

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

-

<uniform_on_sphere>

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

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


Table 30.12. Utilities

Имя

Описание

<seed_seq>

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

<random_number_generator>

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

<generate_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-19 16:30:30/0.019474983215332/0