std::random_device:: entropy
|
double
entropy
(
)
const
noexcept
;
|
(начиная с C++11) | |
Получает оценку энтропии устройства случайных чисел, которая представляет собой значение с плавающей точкой между 0 и log 2 (max()+1) (что равно std:: numeric_limits < unsigned int > :: digits ). Если устройство имеет n состояний с индивидуальными вероятностями P 0 ,...,P n-1 , энтропия устройства S определяется как
S = −∑
n-1
i=0
P
i
log(P
i
)
Детерминированный генератор случайных чисел (например, псевдослучайный движок) имеет нулевую энтропию.
Возвращаемое значение
Значение энтропии устройства или ноль, если не применимо.
Примечания
Эта функция не полностью реализована в некоторых стандартных библиотеках. Например, LLVM libc++ до версии 12 всегда возвращает ноль, несмотря на то что устройство является недетерминированным. Для сравнения, реализация Microsoft Visual C++ всегда возвращает 32 , а boost.random возвращает 10 .
Энтропия устройства ядра Linux
/dev/urandom
может быть получена с помощью
ioctl RNDGETENTCNT
— именно это использует
std::random_device::entropy()
в
GNU libstdc++
начиная с версии 8.1.
Пример
Пример вывода на одной из реализаций
#include <iostream> #include <random> int main() { std::random_device rd; std::cout << rd.entropy() << '\n'; }
Возможный вывод:
32