名前空間
変種
操作

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.random10 を返します。

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
English 日本語 中文(简体) 中文(繁體)