std:: uniform_real_distribution
|
Определено в заголовке
<random>
|
||
|
template
<
class
RealType
=
double
>
class uniform_real_distribution ; |
(начиная с C++11) | |
Генерирует случайные значения с плавающей точкой x , равномерно распределенные на интервале [a, b) , то есть распределенные согласно функции плотности вероятности:
-
P(x|a,b) =
.1 b − a
std::uniform_real_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)
|
выполняет потоковый ввод и вывод для псевдослучайного распределения чисел
(шаблон функции) |
Примечания
Создать распределение на замкнутом интервале [a, b] из этого распределения сложно. Использование std:: nextafter ( b, std:: numeric_limits < RealType > :: max ( ) ) в качестве второго параметра не всегда работает из-за ошибок округления.
Большинство существующих реализаций содержат ошибку, при которой они могут иногда возвращать
b
(
GCC #63176
LLVM #18767
MSVC STL #1074
). Изначально считалось, что это происходит только когда
RealType
является
float
и при наличии
LWG issue 2524
, но позже было показано, что
ни одно из этих условий не требуется для проявления ошибки
.
Пример
Выведите 10 случайных чисел между 1 и 2.
#include <iostream> #include <random> int main() { std::random_device rd; // Will be used to obtain a seed for the random number engine std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd() std::uniform_real_distribution<> dis(1.0, 2.0); for (int n = 0; n < 10; ++n) // Use dis to transform the random unsigned int generated by gen into a // double in [1, 2). Each call to dis(gen) generates a new random double. std::cout << dis(gen) << ' '; std::cout << '\n'; }
Возможный вывод:
1.80829 1.15391 1.18483 1.38969 1.36094 1.0648 1.97798 1.27984 1.68261 1.57326
Внешние ссылки
| Генерация случайных чисел с плавающей запятой из интервала — © 2022. Frédéric Goualard, Университет Нанта. |