Spec-Zone.ru › C++

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

Spec-Zone.ru

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