std:: generate_canonical
|
Определено в заголовке
<random>
|
||
|
template
<
class
RealType,
std::
size_t
Bits,
class
Generator
>
RealType generate_canonical ( Generator & g ) ; |
(начиная с C++11) | |
Генерирует случайное число с плавающей точкой в диапазоне
[
0
,
1
)
.
Для генерации достаточной энтропии, generate_canonical ( ) будет вызывать g ( ) ровно k раз, где k = max(1, ⌈ b / log 2 R ⌉) и
- b = std:: min ( Bits, std:: size_t { std:: numeric_limits < RealType > :: digits } ) ,
- R = g. max ( ) - g. min ( ) + 1 .
Содержание |
Параметры
| g | - | генератор, используемый для получения энтропии |
Возвращаемое значение
Вещественное число в диапазоне
[
0
,
1
)
.
Исключения
Ничего, кроме выброшенных из g .
Примечания
В некоторых существующих реализациях присутствует ошибка, при которой они могут иногда возвращать
1.0
если
RealType
является
float
GCC #63176
LLVM #18767
MSVC STL #1074
. Это описано в
LWG issue 2524
.
Пример
Генерировать случайные числа с 10 битами энтропии: это может производить только k * R различных значений.
#include <iostream> #include <random> int main() { std::random_device rd; std::mt19937 gen(rd()); for (int n = 0; n < 10; ++n) std::cout << std::generate_canonical<double, 10>(gen) << ' '; std::cout << '\n'; }
Возможный вывод:
0.208143 0.824147 0.0278604 0.343183 0.0173263 0.864057 0.647037 0.539467 0.0583497 0.609219
Смотрите также
|
(C++11)
|
генерирует вещественные значения, равномерно распределенные в заданном диапазоне
(шаблон класса) |