std:: exponential_distribution
|
Определено в заголовке
<random>
|
||
|
template
<
class
RealType
=
double
>
class exponential_distribution ; |
(начиная с C++11) | |
Генерирует случайные неотрицательные вещественные значения x , распределенные в соответствии с функцией плотности вероятности:
-
P(x|λ) = λe
-λx
Полученное значение представляет собой время/расстояние до следующего случайного события, если случайные события происходят с постоянной интенсивностью λ в единицу времени/расстояния. Например, это распределение описывает время между щелчками счетчика Гейгера или расстояние между точковыми мутациями в цепи ДНК.
Это непрерывный аналог std::geometric_distribution .
std::exponential_distribution
удовлетворяет требованиям
RandomNumberDistribution
.
Содержание |
Параметры шаблона
| RealType | - | Тип результата, генерируемый генератором. Поведение не определено, если это не один из float , double , или long double . |
Типы членов
| Тип члена | Определение |
result_type
(C++11)
|
RealType |
param_type
(C++11)
|
тип набора параметров, см. RandomNumberDistribution . |
Функции-члены
|
(C++11)
|
создает новое распределение
(public member function) |
|
(C++11)
|
сбрасывает внутреннее состояние распределения
(public member function) |
Генерация |
|
|
(C++11)
|
генерирует следующее случайное число в распределении
(public member function) |
Характеристики |
|
|
(C++11)
|
возвращает параметр распределения
lambda
(интенсивность событий)
(public member function) |
|
(C++11)
|
получает или устанавливает объект параметров распределения
(public member function) |
|
(C++11)
|
возвращает минимальное потенциально генерируемое значение
(public member function) |
|
(C++11)
|
возвращает максимальное потенциально генерируемое значение
(public member function) |
Функции, не являющиеся членами класса
|
(C++11)
(C++11)
(removed in C++20)
|
сравнивает объекты распределения
(функция) |
|
(C++11)
|
выполняет потоковый ввод и вывод для псевдослучайного распределения чисел
(шаблон функции) |
Примечания
Некоторые реализации могут иногда возвращать бесконечность, если
RealType
является
float
. Это описано в
LWG issue 2524
.
Пример
#include <iomanip> #include <iostream> #include <map> #include <random> #include <string> int main() { std::random_device rd; std::mt19937 gen(rd()); // если частицы распадаются в среднем один раз в секунду, // сколько времени (в секундах) до следующего распада? std::exponential_distribution<> d(1); std::map<int, int> hist; for (int n = 0; n != 10000; ++n) ++hist[2 * d(gen)]; for (auto const& [x, y] : hist) std::cout << std::fixed << std::setprecision(1) << x / 2.0 << '-' << (x + 1) / 2.0 << ' ' << std::string(y / 200, '*') << '\n'; }
Возможный вывод:
0.0-0.5 ******************* 0.5-1.0 *********** 1.0-1.5 ******* 1.5-2.0 **** 2.0-2.5 ** 2.5-3.0 * 3.0-3.5 3.5-4.0
Внешние ссылки
| Вайсштейн, Эрик В. "Экспоненциальное распределение." Из MathWorld — веб-ресурс Wolfram. |