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, или long double. |
Типы членов
| Тип члена | Определение |
|---|---|
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::round(d(gen)); };
std::map<int, int> hist{};
for (int n = 0; n != 10000; ++n)
++hist[random_int()];
for (auto [x, y] : hist)
std::cout << std::setw(2) << x << ' ' << std::string(y / 200, '*') << '\n';
}Возможный вывод:
-2 -1 0 1 * 2 *** 3 ****** 4 ******** 5 ********** 6 ******** 7 ***** 8 *** 9 * 10 11 12
Внешние ссылки
| 1. | Weisstein, Eric W. "Нормальное распределение." Из MathWorld — Wolfram Web Resource. |
| 2. | Нормальное распределение — Из Википедии. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/random/normal_distribution