乱数関数について
Re: 乱数関数について
> srand((unsigned int)time(NULL));
原因はこれ.
これの場所を main の先頭にでも移して,一度だけやるようにする.
原因はこれ.
これの場所を main の先頭にでも移して,一度だけやるようにする.
Re: 乱数関数について
srand関数 は、引数の値に基づいてこの後出す乱数の系列を決定します。
この値として秒単位の時刻を与えると、処理は通常1秒に100万回以上実行されるため、
高い確率で毎回同じ値が引数となり、その結果毎回同じ乱数の系列が用いられます。
よって、同じ系列なので、その最初の値も同じとなります。
なお、「サブルーチン内にいれてはいけない」というのは不正確です。
1度だけ実行されるようにする仕組みを入れることで、srandをサブルーチン内に入れても毎回初期化せずに乱数を利用することができます。
この値として秒単位の時刻を与えると、処理は通常1秒に100万回以上実行されるため、
高い確率で毎回同じ値が引数となり、その結果毎回同じ乱数の系列が用いられます。
よって、同じ系列なので、その最初の値も同じとなります。
なお、「サブルーチン内にいれてはいけない」というのは不正確です。
1度だけ実行されるようにする仕組みを入れることで、srandをサブルーチン内に入れても毎回初期化せずに乱数を利用することができます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)