Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。1,021件31MinGW版GCCでは、std::random_deviceのデフォルトコンストラクターを使うと毎回同じ数値列が生成されますが、これは規格に準拠した動作なのでしょうか?実装の制限によって擬似乱数生成器を使うことは許されているようですが、std::random_deviceを使うということは予測不可能な乱数列を期待しているはずなので、種を固定して毎回同じ数値列が生成される(=簡単に予測可能)のは、さすがにまずいと思うのですが。票2種を固定して毎回同じ数値列が生成される(=簡単に予測可能)のは、さすがにまずいと思うのですが。望ましい振る舞いではありませんが、ぎりぎりC++規格準拠といえる気はします。範囲内であり、単に実装の品質が著しく低いという解釈です。なっているか確認してみてください。処理系の都合で非決定的な乱数列を返せないときは、entropy()がゼロを返す仕様になっています。1).追記:「種を固定して」と表現されていますが、random_deviceコンストラクタに与えるのは乱数生成エンジンに対する種(seed)ではなく、処理系に与えるトークン(token)です。本来の意図としては、いくつかの選択肢から乱数生成エンジンを"選ぶ"ためのものです。個の銅バッジMinGW版GCCでは、entropy()が0.0を返します。同様に0.0を返す環境でも、毎回異なる乱数列を返す環境(Cygwin版GCCなど)もあります。entropy()は非決定的な乱数生成エンジンを使っているはずの環境でも0.0を固定で返す実装になっていて、この値は実質ほとんど意味がないような状況ですね。2:141『追記:「種を固定して...』は承知していますが、GCCでは擬似乱数生成器を使う場合は種として使っています。指定しなければ種は固定になります。たしかにentropy()は現状あてにならなそうですね。2個目コメントについては、tokenをPRNGのseedとして使うのもimplementation-definedの範疇かと思います。|2GCCの持つstd::random_deviceの主な実体ですが、gcc/libstdc++-v3/include/bits/random.hgcc/libstdc++-v3/src/c++11/random.ccにあります。プリプロセッサマクロでコンパイル時に動作を分岐しています。_GLIBCXX_USE_RANDOM_TR1/dev/randomか/dev/urandomかのどちらかのデバイスファイルが存在すれば<random>はTR1対応とする。MinGW環境では誤検出するため常にTR1未対応とする。_GLIBCXX_X86_RDRANDx86アーキテクチャの持つRDRAND命令が使用可能かテストする。2つが影響しています。その上で実際の動作としてはライブラリコンパイル時に_GLIBCXX_USE_RANDOM_TR1が定義されアプリケーションコンパイル時にstd::random_deviceコンストラクター引数に"default"が渡されライブラリコンパイル時に_GLIBCXX_X86_RDRANDが定義されアプリケーション実行時にCPUがRDRAND命令をサポートしているかテストしすべての条件を満たした場合には/dev/randomも/dev/urandomも使用せずRDRAND命令を使用する実装になっていました。個人的にな感想としては、RDRANDを使用する優先順位が間違っている気がします。アプリケーションコンパイル時に無理やり_GLIBCXX_USE_RANDOM_TR1を定義しても必要なライブラリ関数が用意できていないためコンパイルには成功してもリンクエラーになるものと思われます。説明に終始していて質問に答えていませんでした。L1568~L1587を引用します。TR1、すなわちTR1以前という意識のようです。C++11どころの話ではなさそうです。個の銅バッジ_GLIBCXX_USE_RANDOM_TR1は、/dev/randomと/dev/urandomが利用可能か否かを表しているようです。random_deviceのstatusは、TR1もC++11もYになっています。_GLIBCXX_USE_RANDOM_TR1の方はTR1の時代から変わっていないので、取り敢えず作って忘れ去られてるのかも。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。会を開催します🎉サイトの未翻訳箇所を見つけて、もくもく会で直しましょう関連する質問4C++のios_baseが公開されていないといわれる2C++のコンソールアプリケーションが動かない4C++11にstd::stouiがないのはなぜ?3std::coutとstd::wcoutを混在させると正しく出力されない1std::atomic<bool>とcompare_exchange_strongでdeadlockしてしまう。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。