これを重複してタグ付けする前に(私はこれが何回も尋ねられていることを知っています)、私はStackOverflowだけでなく数多くの質問/回答を読みました'チュートリアル'など。C++ 11 Mersenne Twisterは毎回同じ値を返します
私が知っているすべての推奨事項にもかかわらず、私のコードは実行するたびに同じ "ランダム"番号を生成します。私は私が何をすべきかとは異なる何かをしているように私には見えません。なぜこれは機能しないのですか?
#include <random>
#include <iostream>
using namespace std;
random_device rd; // used to initialise (seed) engine
mt19937 mt(rd()); // random-number engine used (Mersenne-Twister in this case)
uniform_int_distribution<int> dist(1, 4); // guaranteed unbiased
後のコードで/関数内:コメントswitch文で 欠落休憩から
for (it : vec_one) {
int rand_int = dist(mt); // Generate Random Number
switch (rand_int)
{
case 1:
cout << "One!" << endl;
case 2:
cout << "Two!" << endl;
case 3:
cout << "Three!" << endl;
case 4:
cout << "Four!" << endl;
default:
break;
}
}
回答。それは本当に簡単でした。ジェネレータは正常に動作します。私は彼らを過度の状態に含めるのを忘れて、とても馬鹿だと感じました。 しかし... この問題をスキップするコメントと回答の数は、それがどれほど簡単かを示しています。私はちょっと愚かな気がします...
が私のためにうまく動作しますが、何をやっているかわからない、ライブたとえば、[ここ](http://coliru.stacked-crooked.com/a/61540450cafd9f1b)を参照してください。最小限のコンパイル可能なサンプルを投稿できますか?ところで、 'case'ステートメントに' break'sがないので、ケーススイッチに入ると 'One!二!三! 4! 'と表示されます。 – vsoftco
これはMSVCであり、MinGWなどではないと確信していますか?最後に私が知っていたのは、libstdC++のWindows実装は 'random_device'を非決定的にしませんでした(これはまだ標準的な観点からは完全に合法です)。 – chris
あなたのシステムで 'cout << rd.entropy()'の結果は何ですか? http://www.cplusplus.com/reference/random/random_device/も参照してください。あなたのシステムに実際の非決定論的乱数ジェネレータがない場合は、毎回異なるシーケンスを見ることは期待できません(そして、 'entropy()'は理論的には0を返します)、 'mt19937'コンストラクタを使うべきです代わりに実際のシード](http://www.cplusplus.com/reference/random/mersenne_twister_engine/mersenne_twister_engine/)(そこの例も参照)。 –