std::normal_distribution
Определён в заголовке <random> | ||
|---|---|---|
template< class RealType = double > class normal_distribution; | (начиная с C++11) |
Генерирует случайные числа согласно нормальному (или гауссовому) распределению случайных чисел. Оно определяется как: \(\small{f(x;\mu,\sigma)}=\frac{1}{\sigma\sqrt{2\pi} }\exp{(-\frac{1}{2}{(\frac{x-\mu}{\sigma})}^2)}\)f(x; μ,σ) =
1/σ√2π exp⎛⎜
⎝-1/2 ⎛
⎜
⎝x-μ/σ⎞
⎟
⎠2⎞
⎟
⎠
Здесь \(\small\mu\)μ — среднее значение, а \(\small\sigma\)σ — стандартное отклонение (stddev).
std::normal_distribution удовлетворяет всем требованиям RandomNumberDistribution.
Параметры шаблона
| RealType | - | Тип результата, генерируемого генератором. Поведение не определено, если это не один из типов float, double или longdouble. |
Типы-члены
| Тип-член | Определение |
|---|---|
result_type (C++11) | RealType |
param_type (C++11) | тип набора параметров; см. RandomNumberDistribution. |
Функции-члены
|
(C++11) | создаёт новое распределение (функция-член класса) |
|
(C++11) | сбрасывает внутреннее состояние распределения (функция-член класса) |
Генерация |
|
|
(C++11) | генерирует следующее случайное число в распределении (функция-член класса) |
Характеристики |
|
|
(C++11) | возвращает параметры распределения (функция-член класса) |
|
(C++11) | получает или задаёт объект параметров распределения (функция-член класса) |
|
(C++11) | возвращает минимальное потенциально генерируемое значение (функция-член класса) |
|
(C++11) | возвращает максимальное потенциально генерируемое значение (функция-член класса) |
Функции, не являющиеся членами класса
|
(C++11)(C++11)(удалён в 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()};
// Values near the mean are the most likely. Standard deviation
// affects the dispersion of generated values from the mean.
std::normal_distribution d{5.0, 2.0};
// Draw a sample from the normal distribution and round it to an integer.
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. | Вайсстайн, Эрик У. «Нормальное распределение». Из MathWorld — веб-ресурса Wolfram. |
| 2. | Нормальное распределение — из Википедии. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/random/normal_distribution