std::random_device::entropy
double entropy() const noexcept; | (начиная с 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/cpp/numeric/random/random_device/entropy