std::random_device::entropy

From cppreference.com
< cpp‎ | numeric‎ | random‎ | random device
 
 
 
Pseudo-random number generation
Uniform random bit generators
Engines and engine adaptors
Non-deterministic generator
Distributions
Uniform distributions
Bernoulli distributions
Poisson distributions
Normal distributions
Sampling distributions
Seed Sequences
(C++11)
C library
 
std::random_device
Member functions
Generation
Characteristics
random_device::entropy
(C++11)
 
double entropy() const noexcept;
(since C++11)

Obtains an estimate of the random number device entropy, which is a floating-point value between 0 and log
2
(max()+1)
(which is equal to std::numeric_limits<unsigned int>::digits). If the device has n states whose individual probabilities are P
0
,...,P
n-1
, the device entropy S is defined as

S = -Σn-1
i=0
P
i
log(P
i
)

A deterministic random number generator (e.g. a pseudo-random engine) has entropy zero.

Return value

The value of the device entropy, or zero if not applicable.

Notes

This function is not fully implemented in some standard libraries. For example, LLVM libc++ prior to version 12 always returns zero even though the device is non-deterministic. In comparison, Microsoft Visual C++ implementation always returns 32, and boost.random returns 10.

The entropy of the Linux kernel device /dev/urandom may be obtained using ioctl RNDGETENTCNT - that's what std::random_device::entropy() in GNU libstdc++ uses as of version 8.1

Example

Example output on one of the implementations

#include <iostream>
#include <random>
 
int main()
{
    std::random_device rd;
    std::cout << rd.entropy() << '\n';
}

Possible output:

32