0
を返さない私はメルセンヌツイスターのmt19937ar.cバリアントを使用する方法の例を探してみましたが、ほとんどはC++とothers seem to use mtwist.h
に出てきます。以下メルセンヌツイスター(mt19937ar.c)は乱数
マイコード:
int getRandomNum(void)
{
int i;
i = (int) genrand_int32();
return i;
}
int main(int argc, char **argv)
{
...
int m = getRandomNum();
printf("m = %d", m);
...
return 0;
}
は、単純に何度も何度も同じ整数を出してくれる。シードの問題のようですが、私がmt19937
で乱数を取得したことがわかったすべての実装は単にgenrand_int32()
を呼び出すだけです。私はこれを間違ってやっていますか?
ありがとうございます!これは助けになりました。 – 8protons
あなたの最初の文は実際には有効ではありません。明示的にシードが与えられていなければ、rngをシードできます。魔法は必要ありません... – Apollys
@Apollys私の答えで説明したように、OPで使用される実装はデフォルトで5489のシードになります。これは非常に古いポータブル実装であるため、 'time()'のような関数は使用できません。 (それらはすべてのプラットフォームには存在しません!) – duskwuff