std::random_device::entropy
| double entropy() const noexcept; |
(seit C++11) | |
Ermittelt eine Schätzung der Entropie des Zufallszahlengeräts, die ein Gleitkommawert zwischen 0 und log2(max()+1) (was gleich std::numeric_limits<unsigned int>::digits ist) ist. Wenn das Gerät n Zustände mit den individuellen Wahrscheinlichkeiten P0,...,Pn-1 hat, ist die Geräteeentropie S definiert als
S = −∑n-1
i=0 Pilog(Pi)
Ein deterministischer Zufallszahlengenerator (z. B. eine Pseudozufalls-Engine) hat eine Entropie von Null.
[bearbeiten] Rückgabewert
Der Wert der Geräteeentropie oder Null, falls nicht zutreffend.
[bearbeiten] Hinweise
Diese Funktion ist in einigen Standardbibliotheken nicht vollständig implementiert. Zum Beispiel gibt LLVM libc++ vor Version 12 immer Null zurück, obwohl das Gerät nicht-deterministisch ist. Im Vergleich gibt die Implementierung von Microsoft Visual C++ immer 32 zurück, und boost.random gibt 10 zurück.
Die Entropie des Linux-Kernel-Geräts /dev/urandom kann mit ioctl RNDGETENTCNT abgerufen werden — und genau das verwendet std::random_device::entropy() in GNU libstdc++ seit Version 8.1.
[bearbeiten] Beispiel
Beispielausgabe einer der Implementierungen
#include <iostream> #include <random> int main() { std::random_device rd; std::cout << rd.entropy() << '\n'; }
Mögliche Ausgabe
32