2016-04-30 14 views
0

私は自分のパッケージ用のテストスイートを開発しています。テストの一環として、アルゴリズムをデータブロック上で実行したいと思います。しかし、特定のデータブロックをハードコーディングする代わりに、アルゴリズムを使用してそれを生成することができました。私はC++ 11 <random>施設がこの目的に適しているかどうか疑問に思っています。繰り返し可能な結果を​​得るためにC++ 11 PRNGを使用できますか?

私が理解するところでは、C++ 11乱数エンジンは特定のアルゴリズムを実装する必要があります。したがって、同じシードが与えられた場合、アルゴリズムパラメータで定義された範囲内の同じ乱数シーケンスを生成する必要があります。

しかし、限り分布が懸念しているように、標準のように指定:指定された分布の各々を生成するため

アルゴリズムは実装定義です。私は誤解だ場合を除き - - 分布の出力はかなり未定義であることを意味し

(一般的には26.5.8.1乱数分布クラステンプレート/)

。そして、私がテストしたことから、GNU libstdC++とLLVMプロジェクトのlibC++のディストリビューションでは、同じランダムエンジンを使って異なる結果が得られます。

したがって、異なるプラットフォーム間で完全に反復可能な擬似ランダムデータを生成する最も正しい方法は何ですか?

+0

これは、RNGを直接使用するか、移植可能なディストリビューションを使用することを意味します。標準のものではないので、非標準のもの(手書きのものや第三者のもの)を使用する必要があります – milleniumbug

+0

SHA – LibertyPaul

答えて

2

異なるプラットフォーム間で完全に反復可能な擬似ランダムデータを生成する最も正しい方法は何でしょうか?

これは明らかです:あなた自身のの配布を書きます。あなた自身が指摘したように、エンジンは、特定のアルゴリズムを実装しているため、クロスプラットフォームです。実装定義のディストリビューションです。

自分で配布してください。

0

この回答を参照してください。https://stackoverflow.com/a/34962942/1151329

私は、まさにこの問題と私自身のディストリビューションを書いては完璧に働いていました。私は、Linux、OSx、Windows、x86、ARMで同じシーケンスを手に入れました。