std::random_device::entropy
double entropy() const noexcept; |
(since C++11) |
Получает оценку энтропии устройства генерации случайных чисел, которая представляет собой число с плавающей точкой в диапазоне от 0 до log2(max()+1) (равное std::numeric_limits<unsigned int>::digits). Если устройство имеет n состояний с индивидуальными вероятностями P0,...,Pn-1, энтропия устройства S определяется как
S = −∑n-1i=0 Pilog(Pi)
У детерминированного генератора случайных чисел (например, псевдослучайного генератора) энтропия равна нулю.
Значение возврата
Значение энтропии устройства, или ноль, если не применимо.
Примечания
Эта функция не полностью реализована в некоторых стандартных библиотеках. Например, библиотека 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
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/random/random_device/entropy