2 つの質問があります。
を使用せずに C++ で疑似乱数ジェネレーターをシードする他の方法はあり
srand(time(NULL))
ますか?最初の質問をした理由。現在、ジェネレーターのシードとして時間を使用していますが、ジェネレーターが返す数値は常に同じです。その理由は、時間を格納する変数がある程度切り捨てられているためだと確信しています。(「暗黙の変換は整数の精度を失います:「time_t」(別名「long」)から「unsigned int」」という警告メッセージがあります)これは、本質的に私のシードが来年まで変更されないことを伝えていると推測しています私の目的では、時間をシードとして使用しても問題なく動作しますが、この警告を取り除く方法がわかりません。
以前にそのエラー メッセージが表示されたことがないので、Mac に関係があると思います。64 ビット OS X v10.8 です。私も Xcode を使用して記述とコンパイルを行っていますが、Xcode を使用している他のコンピューターでは問題はありませんでした。
編集:これをいじって調査した後、64ビットMacにあるバグを発見しました。(間違っていたら訂正してください。)time(NULL)
シードとして 1 から 7 までの乱数を mac に選択させようとすると、常に 4 が得られます。いつも。mach_absolute_time()
私はランダマイザーをシードするために使用することになりました。明らかに、これは私のプログラムからすべての移植性を排除します...しかし、私はただの趣味です。
Edit2:ソースコード:
#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, const char * argv[]) {
srand(time(NULL));
cout << rand() % 7 + 1;
return 0;
}
このコードをもう一度実行してテストしました。現在は 3 しか返されていません。これは、C++ 自体ではなく、私のコンピューターに関係しているに違いありません。