Spec-Zone.ru › C++

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API