std::random_device::entropy

< cpp‎ | numeric‎ | random‎ | random device
 
 
数值库
常用数学函数
数学特殊函数 (C++17)
数学常数 (C++20)
浮点环境 (C++11)
复数
数值数组
伪随机数生成
编译时有理数算术 (C++11)
数值算法
(C++17)
(C++17)
插值
(C++20)
(C++20)
通用数值运算
(C++11)
位操作
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
 
 
 
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++ 始终返回零,即使设备是非确定的(对于 libstdc++ ,见 bug 67578 )。与之相比, Microsoft Visual C++ 实现始终返回 32 ,且 boost.random 返回 10 。

Linux 内核设备 /dev/urandom 的熵可用 ioctl RNDGETENTCNT 获得—— GNU libstdc++ 从版本 8.1 起将它用于 std::random_device::entropy()

示例

实现之一上的示例输出

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

可能的输出:

32