名前空間
変種
操作

std::random_device::entropy

提供: cppreference.com
< cpp‎ | numeric‎ | random‎ | random device
 
 
 
擬似乱数生成
一様ランダムビットジェネレータ
エンジンとエンジンアダプタ
非決定的なジェネレータ
分布
一様分布
ベルヌーイ分布
ポアソン分布
正規分布
標本分布
シードシーケンス
(C++11)
C のライブラリ
 
 
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=0
P
i
log(P
i
)

非決定的でない乱数ジェネレータ (擬似乱数エンジンなど) のエントロピーはゼロです。

[編集] 戻り値

デバイスのエントロピーの値、または適用���能でなければゼロ。

[編集] ノート

この関数はいくつかの標準ライブラリでは完全に実装されていません。 例えば、 LLVM libc++ はデバイスが非決定的であっても常にゼロを返し、 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