std::random_device::エントロピー
From cppreference.com
< cpp | numeric | random | random device
| double エントロピー() const noexcept; |
(C++11以降) | |
乱数生成器のエントロピーの推定値を取得します。これは、0 から log2(max()+1) (これは std::numeric_limits<unsigned int>::digits に等しい)までの浮動小数点値です。デバイスに、個々の確率が P0,...,Pn-1 である n 個の状態がある場合、デバイスエントロピー S は次のように定義されます。
S = −∑n-1
i=0 Pilog(Pi)
決定論的な乱数生成器(例:疑似乱数エンジン)はエントロピーゼロです。
[編集] 戻り値
デバイスエントロピーの値。該当しない場合はゼロ。
[編集] 注意
この関数は、一部の標準ライブラリでは完全に実装されていません。たとえば、バージョン12より前のLLVM libc++では、デバイスが非決定的であっても常にゼロを返します。これに対し、Microsoft Visual C++の実装は常に 32 を返し、boost.random は 10 を返します。
Linuxカーネルデバイス /dev/urandom のエントロピーは、ioctl RNDGETENTCNT を使用して取得できます。これは、バージョン8.1以降のGNU libstdc++におけるstd::random_device::entropy()が使用しているものです。
[編集] 例
いずれかの実装での例出力
このコードを実行
#include <iostream> #include <random> int main() { std::random_device rd; std::cout << rd.entropy() << '\n'; }
実行結果の例
32