Namespaces
Variants

std::random_device:: entropy

From cppreference.net
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