std::random_device::entropy
来自 cppreference.cn
< cpp | numeric | random | random device
double entropy() const noexcept; |
(since C++11) | |
获取随机数设备熵的估计值,这是一个介于 0 和 log2(max()+1) 之间的浮点值(等于 std::numeric_limits<unsigned int>::digits)。如果设备有 n 个状态,其各自的概率为 P0,...,Pn-1,则设备熵 S 定义为
S = −∑n-1
i=0 Pilog(Pi)
确定性随机数生成器(例如伪随机引擎)的熵为零。
[编辑] 返回值
设备熵的值,如果不可用则为零。
[编辑] 注意
此函数在某些标准库中未完全实现。例如,LLVM libc++ 12 版本之前始终返回零,即使设备是非确定性的。相比之下,Microsoft Visual C++ 实现始终返回 32,而 boost.random 返回 10。
Linux 内核设备 /dev/urandom
的熵可以使用 ioctl RNDGETENTCNT
获取 —— 这是 GNU libstdc++ 中的 std::random_device::entropy()
从 8.1 版本开始使用的。
[编辑] 示例
在其中一个实现上的示例输出
运行此代码
#include <iostream> #include <random> int main() { std::random_device rd; std::cout << rd.entropy() << '\n'; }
可能的输出
32