std:: normal_distribution
From cppreference.net
|
Определено в заголовке
<random>
|
||
|
template
<
class
RealType
=
double
>
class normal_distribution ; |
(начиная с C++11) | |
Генерирует случайные числа в соответствии с распределением нормальных (или гауссовских) случайных величин . Оно определяется как:
-
f(x; μ,σ) =
exp ⎛1 σ √ 2π
⎜
⎝
⎛-1 2
⎜
⎝
⎞x-μ σ
⎟
⎠ 2
⎞
⎟
⎠
Здесь μ является Математическим ожиданием , а σ является Стандартным отклонением ( stddev ).
std::normal_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)
|
возвращает параметры распределения
(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)
|
выполняет потоковый ввод и вывод для распределения псевдослучайных чисел
(шаблон функции) |
Пример
Запустить этот код
#include <cmath> #include <iomanip> #include <iostream> #include <map> #include <random> #include <string> int main() { std::random_device rd{}; std::mt19937 gen{rd()}; // Значения вблизи среднего наиболее вероятны. Стандартное отклонение // влияет на разброс генерируемых значений от среднего. std::normal_distribution d{5.0, 2.0}; // Извлекаем выборку из нормального распределения и округляем до целого. auto random_int = [&d, &gen]{ return std::lround(d(gen)); }; std::map<long, unsigned> histogram{}; for (auto n{10000}; n; --n) ++histogram[random_int()]; for (const auto [k, v] : histogram) std::cout << std::setw(2) << k << ' ' << std::string(v / 200, '*') << '\n'; }
Возможный вывод:
-1 0 1 * 2 *** 3 ***** 4 ******** 5 ********* 6 ********* 7 ****** 8 *** 9 * 10 11
Внешние ссылки
| 1. | Weisstein, Eric W. "Normal Distribution." Из MathWorld — веб-ресурс Wolfram. |
| 2. | Normal distribution — Из Википедии. |