問題タブ [boost-random]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - クロスプラットフォームの再現可能な番号ジェネレーター
Windows、Mac、Linux、iOS、および Android で特定のシードに対して同じ結果を生成する「乱数」ジェネレーターが必要です。今試しstd::rand
てみboost::random_int_generator
ましboost::mt19937
たが、残念ながらWindowsとMacで結果が異なります。
すべてのプラットフォームで確実に動作する (C++) 実装を知っている人はいますか?
編集1:
より具体的には、boost::mt19937
Windows と Mac の数値の違いは、Windows では (2) 追加の数値ブロックが生成されていることを示しています。これらのブロックは Windows にのみ存在するため、数字の大部分は同じであるため、非常に奇妙に見えます。
編集2:
boost::mt19937
すべてのプラットフォームで確実に動作します。私たちの問題はバグではありませんでした。
c++ - MinGW-w64 gcc の boost::random::random_device コンストラクターとデストラクタへの未定義の参照
私のOSはWindows 7 64ビットで、使用しているC++コンパイラは次のとおりです。
そして、次を使用して Boost バージョン 1.60 をインストールしました。
次に、Boost.Randomチュートリアルの例を使用して、動作するかどうかをテストしました。
最初の 2 つではすべて問題ありませんでしたが、3 つ目では、boost::random::random_device に関するリンカ エラーが発生しました。これだけを持つようにコードを最小化しました:
そして、次のエラーが表示されます。
ここで、SOで、同様の問題を抱えている人が-lboost_systemをフラグに追加したことがわかりましたが、私にとっては役に立ちませんでした。
なぜそれが機能しないのですか?確認したところ、Boost フォルダーに random_device.hpp ヘッダーがあり、random_device() と ~random_device() が宣言されています。
c++ - ブースト乱数ジェネレーターの破棄の動作
ブースト乱数ジェネレーターをアダプター クラスでラップして、モンテカルロ ルーチンを実装しています。クラスのメンバー関数で単体テストを作成するとき、.discard(unsigned int N) の動作は N 個の乱数を格納せずに描画し、rng の状態を進めることであると想定しました。ブーストコードは次のとおりです。
これは私の仮定を支持します。ただし、 .discard(1) の結果のシーケンスは、破棄のない同じシーケンスと 1 つの違いではないことがわかりました。コード:
出力
.discard の動作についての私の解釈は間違っていますか? 2 つのシーケンスの最初の 3 つの出力が異なり、その後は同一になるのはなぜですか?
(このコードは、msvc 19.00.23918 および cygwin の g++ 4.9.2 でコンパイルされ、同じ結果が得られました)。