std::random_device:: entropy
|
double
entropy
(
)
const
noexcept
;
|
(desde C++11) | |
Obtiene una estimación de la entropía del dispositivo de números aleatorios, que es un valor de punto flotante entre 0 y log 2 (max()+1) (que es igual a std:: numeric_limits < unsigned int > :: digits ). Si el dispositivo tiene n estados cuyas probabilidades individuales son P 0 ,...,P n-1 , la entropía del dispositivo S se define como
S = −∑
n-1
i=0
P
i
log(P
i
)
Un generador determinista de números aleatorios (por ejemplo, un motor pseudoaleatorio) tiene entropía cero.
Valor de retorno
El valor de la entropía del dispositivo, o cero si no es aplicable.
Notas
Esta función no está completamente implementada en algunas bibliotecas estándar. Por ejemplo, LLVM libc++ anterior a la versión 12 siempre retorna cero aunque el dispositivo sea no determinista. En comparación, la implementación de Microsoft Visual C++ siempre retorna 32 , y boost.random retorna 10 .
La entropía del dispositivo del kernel de Linux
/dev/urandom
puede obtenerse usando
ioctl RNDGETENTCNT
— eso es lo que
std::random_device::entropy()
en
GNU libstdc++
utiliza a partir de la versión 8.1.
Ejemplo
Salida de ejemplo en una de las implementaciones
#include <iostream> #include <random> int main() { std::random_device rd; std::cout << rd.entropy() << '\n'; }
Salida posible:
32