std::random_device:: entropy
| Common mathematical functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Mathematical special functions (C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Mathematical constants (C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic linear algebra algorithms (C++26) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Data-parallel types (SIMD) (C++26) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Floating-point environment (C++11) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Complex numbers | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Numeric array (
valarray
)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Pseudo-random number generation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Bit manipulation (C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Saturation arithmetic (C++26) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Factor operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Interpolations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Generic numeric operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| C-style checked integer arithmetic | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Generation | ||||
| Characteristics | ||||
|
random_device::entropy
|
||||
|
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