std::random_device::entropy
提供: cppreference.com
< cpp | numeric | random | random device
double entropy() const noexcept; |
(C++11以上) | |
乱数デバイスのエントロピーの見積りを取得します。 これは 0 と log
2(max()+1) (これは std::numeric_limits<unsigned int>::digits と等しい) の間の浮動小数点値です。 デバイスが、個々の確率が P
0,...,P
n-1 である n 個の状態を持つ場合、デバイスのエントロピー S は以下のように定義されます。
S = -Σn-1
i=0P
ilog(P
i)
非決定的でない乱数ジェネレータ (擬似乱数エンジンなど) のエントロピーはゼロです。
[編集] 戻り値
デバイスのエントロピーの値、または適用���能でなければゼロ。
[編集] ノート
この関数はいくつかの標準ライブラリでは完全に実装されていません。 例えば、 LLVM libc++ はデバイスが非決定的であっても常にゼロを返し、 Microsoft Visual C++ の実装は常に 32 を返し、 boost.random は 10 を返します。
Linux カーネルのデバイス /dev/urandom のエントロピーは ioctl RNDGETENTCNT を使用して取得できます。 GNU libstdc++ の std::random_device::entropy()
はバージョン 8.1 からこれを使用しています。
[編集] 例
実装のひとつにおける出力例
Run this code
#include <iostream> #include <random> int main() { std::random_device rd; std::cout << rd.entropy() << '\n'; }
出力例:
32