В дополнение к генераторам случайных чисел, библиотека Boost.Random содержит реализации функций распределений, которые отображают одно распределение (обычно равномерное, создаваемое каким-либо генератором) на другое.
Обычно, возможны несколько разных реализаций для получения заданного распределения. Зачастую необходимо делать выбор между использованием дополнительной памяти, большего количества вызовов генератора случайных чисел или более сложных вычислений (трансцендентных функций типа тригонометрических). Данное описание интерфейса не выделяет какую либо конкретную реализацию. Однако реализации, которые не могут обеспечить определенные характеристики распределени, не являются приемлемыми.
Параметры шаблонов в функциях распределения всегда перечисляются в следующем порядке:
Замечание: Функции распределений более не удовлетворяют требованиям итераторов (std:24.1.1 [lib.input.iterators]), потому что следование этим требованиям для интерфейса заданного генератора влечет слишком значительные расходы для всех пользователей, включая тех, которым этот интерфейс не нужен. Более того, интерфейс генераторов является более естественным для получения случайных чисел. Используйте iterator adaptor, если необходим генератор с интерфейсом итератора.
Все функции распределения, описанные далее, запоминают неконстантную ссылку на генератор случайных чисел. таким образом, функции распределения не следуют концепции Assignable. Они, впрочем, удовлетворяют требованиям концепции CopyConstructible. Копирование функции распределения влечет копирование значений параметров. Далее, и копия, и оригинал ссылаются на один и тот же генератор случайных чисел. Поэтому и копия, и оригинал получают исходные случайных числа из одной последовательности.
В данном описании мы воздерживаемся от детального описания тех членов классов, которые уже описаны в концепции.
Функция распределения uniform_smallint моделирует random distribution. При каждом вызове, эта функция возвращает случайную целую величину, распределенную равномерно на множестве целых чисел {min, min+1, min+2, ..., max}. Подразумевается, что требуемый диапазон (max-min+1) достаточно мал в сравнении с диапазоном случайных чисел, возвращаемых используемым генератором, поэтому реализация данного распределения не содержит код для ограничения или компенсации ошибок дискретизации.
Пусть rout=(max-min+1) - требуемый диапазон целых чисел, и let rbase - диапазон чисел, возвращаемых используемым генератором. Тогда для равномерного распредеения теоретическое значение вероятности для любого числа i в диапазоне rout будет равна pout(i) = 1/rout. Аналогичным образом, предполагается равномерное распределение в диапазоне rbase для исходного генератора чисел. то есть pbase(i) = 1/rbase. Пусть pout_s(i) обозначает случайное распределение, генерируемое uniform_smallint. Тогда сумма (pout_s(i)/pout(i) -1)2 по всем i в диапазоне rout не должна превышать rout/rbase2 (rbase mod rout)(rout - rbase mod rout).
Параметр шаблона IntType должен быть целым (или аналогичным) типом.
Замечание: Верхняя граница (rbase mod rout)(rout - rbase mod rout) есть rout2/4. Так как верхняя граница суммы квадратов относительных ошибок дискретизации есть rout3/(4*rbase2), то следует либо выбирать такое rbase что rbase > 10*rout2 , либо проверять что rbase делится на rout.
Функция распределения uniform_int моделирует распределение случайных чисел. При каждом вызове, она возвращает случайное целое число, равномерно распределенное на множестве целых чисел {min, min+1, min+2, ..., max}.
Что такое OpenMP? | PARALLEL.RU - Информационно ... |
DO/SECTIONS - распределение работы; распределение итераций в циклах.
... Интерфейс OpenMP задуман как стандарт для программирования на ...
Спецификации для языков Fortran и C/C++ появились соответственно в ... http://parallel.ru/tech/tech_dev/openmp.html |
Эффекты: создается объект типа uniform_int. Методы min и max возвращают параметрами распределения.
Возвращает: значение параметра "max" распределения.
Возвращает: Равномерно распределенное число x в диапазоне 0 <= x < n. [Замечание: это позволяет использовать объект variate_generator и распределение uniform_int с std::random_shuffe, см. [lib.alg.random.shuffle]. ]
Функция распределения uniform_01 моделирует распределение случайных величин. При каждом вызове она возвращает случайное число с плавающей точкой, равномерно распределенное в диапазоне [0..1). Случайная величина получается с использованием std::numeric_limits<RealType>::digits случайных двоичных разрядов, то есть мантисса числа с плавающей точкой полностью заполняется случайными битами.
Параметр шаблона RealType должен обозначать тип с плавающей точкой, который поддерживает операторы +, -, и /. Он должен быть достаточным чтобы представлять величину rng.max()-rng.min()+1.
Замечание: текущая реализация содержит ошибку, так как возможно, что не все биты мантиссы заполняются случайными битами. Я не уверен как можно заполнять класс boost::bigfloat случайными битами эффективно. Возможно, это подходящий случай для traits.
Эффекты: создается функтор uniform_01 с указанным генератором случайных чисел как источником чисел.
Функция распределения uniform_real является моделью распределения случайных чисел. При каждом вызове она возвращает случайное число с плавающей точкой, распределенное равномерно в диапазоне [min..max). Случайная величина получается с использованием std::numeric_limits<RealType>::digits случайных двоичных разрядов, то есть мантисса числа с плавающей точкой полностью заполняется случайными битами.
Эффекты: создает объект класса uniform_real; min и max являются параметрами распределения.
Возвращает: Параметр распределения "min".
Возвращает: Параметр распределения "max".
Шаблон класса bernoulli_distribution моделирует распределение случайных чисел. Такое распределение возвращает значение true с вероятностью P(true) = p и значение false с вероятностью P(false) = 1-p. Величина p является параметром распределения.
Интерфейс прикладного программирования Win32 |
Например, распределение памяти, вывод информации на экран, ... Dev C++
OLE WinAPI Календарь и цифровые часы почти Vista SideBar всего 21kb ... http://c-spravochnik.ru/26/2602.php |
Эффект: создается объект класса bernoulli_distribution. p является параметром распределения.
Возвращается: параметр распределения "p".
Реализации шаблона geometric_distribution моделируют распределение случайных чисел. Распределение geometric_distribution генерирует целочисленные случайные величины i >= 1 с вероятностями p(i) = (1-p) * pi-1. p это параметр распределения.
Эффекты: создается объект класса geometric_distribution; p является параметром распределения.
Возвращает: параметр распределения "p".
Реализации шаблона triangle_distribution моделируют распределение случайных чисел. Возвращаемые значения с плавающей точкой x удовлетворяют неравенству a <= x <= c; x имеет треугольное распределение, где b является наиболее вероятным значением для x.
Эффекты: конструируется функтор triangle_distribution. Значения a, b, c являются параметрами распределения.
Реализации шаблона exponential_distribution моделируют распределение случайных чисел. Такое распределение генерирует случайные числа x > 0 распределенные с плотностью вероятности p(x) = lambda * exp(-lambda * x), где lambda - параметр распределения.
Эффекты: создается объект класса exponential_distribution использующий rng как источник случайных чисел. lambda - параметр распределения.
Возвращает: параметр распределения "lambda".
Реализации шаблона normal_distribution моделируют распределение случайных чисел. Это распределение дает случайные числа x, распределенные с плотностью вероятности p(x) = 1/sqrt(2*pi*sigma) * exp(- (x-mean)2 / (2*sigma2) ), где mean и sigma являются параметрами распределения.
Эффекты: создается объект класса normal_distribution; mean и sigma являются параметрами распределения.
Возвращает: параметр распределения "mean".
Возвращает: параметр распределения "sigma".
Пример кода, который создает генератор псевдослучайных величин с нормальным распределением:
...
Реализации шаблона lognormal_distribution моделируют распределение случайных чисел. Такое распределение генерирует случайные числа с плотностью вероятности p(x) = 1/(x * normal_sigma * sqrt(2*pi)) * exp( -(log(x)-normal_mean)2 / (2*normal_sigma2) ) для x > 0, где normal_mean = log(mean2/sqrt(sigma2 + mean2)) и normal_sigma = sqrt(log(1 + sigma2/mean2)).
Другими словами, "логарифмически-нормальный закон" встречается у случайных чисел, логарифм которых распределен нормально. Это распределение широко используется в теории надежности; с его помощью аппроксимируются распределения полей атмосферных и промышленных помех.
Эффекты: создается функтор как объект класса lognormal_distribution. mean и sigma являются средним и стандартным отклонением логнормального распределения.
Реализации шаблона uniform_on_sphere моделируют распределение случайных чисел. Это распределение описывает случайные числа, равномерно распределенные на единичной сфере в пространстве с произвольной размерностью dim. параметр шаблона Cont должен быть контейнерным типом аналогичным STL, с методами begin и end возвращающими неконстантные итераторы типа Cont::iterator.
Эффекты: создается функтор как объект класса uniform_on_sphere. dim это число измерений сферы.