ランダムシード


ランダムの数を簡単に話します
int main()
{
	int iSecret, iGuess;

	/*         */
	srand(time(NULL));

	//generate secret number: 
	iSecret = rand() % 10 + 1;
}
関数rand()は本物の乱数生成器であり、srand()はRand()に使用される乱数シードを設定します。
もしあなたが最初にランド()を呼び出していないなら、システムはあなたのために自動的にスタートします。
同じシードの数を使ってスランド()を呼び出すと、同じ乱数シーケンスが生成されます。
srand((unsigned)time(NULL)
システムタイミング/カウンタの値をランダムシードとします。各シードは、アルゴリズムによって予め生成された乱数のセットに対応しているので、同じプラットフォーム環境では、異なる時間に発生する乱数は異なる。
したがって、srand time(NULL)をsrand(TP)に変更すると、いつ運転しても、何回運転しても得る「乱数」は一定のシーケンスとなり、srandが生成する乱数は疑似乱数となる。
ライブラリ関数では、システムは乱数を生成するための2つの関数を提供します。 
プロトタイプは:1.int rand(void):srandで指定されたseedから[0,RAND_]に戻ります。MAX(0 x 7 fff)間のランダム整数。2.void srand(unsigned seed):パラメータseedは、rand()の開始値を初期化するためのシードです。ただし、「疑似乱数」とは偽の乱数ではないので注意が必要です。
実際には絶対的な乱数は理想的な状態の乱数だけです。コンピュータは相対的な乱数すなわち疑似乱数しか生成できません。
コンピューターによって生成された疑似乱数はランダムであり、また規則的である。一部は一定の法則を守り、一部はいかなる法則にも従わない。
例えば、「同じ形の木の葉が二つもない」ということは、物事の特性の違いです。
しかし、どの木の葉も似たような形をしています。これは事物の共通性である法則性です。
この角度から言えば、絶対的な乱数ではなく、疑似乱数しか生成できないという事実を受け入れることができます。システムは、ランド()を呼び出す前に、自動的にスラッド()を呼び出します。ユーザがランド()の前にスラッド()を呼び出してパラメータseedに値を指定した場合、ランド()は疑似乱数を生成する初期値としてseedの値を設定します。
一方、ユーザがランド()の前にスランド()を呼び出していない場合、システムはデフォルトで疑似乱数の初期値として1を使用する。
定値を与えたら、その都度ランダム数列は同じです。したがって、上述のような状況を避けるためには、スラッド(unsigned)time(0)またはsrand(unsigned)time(NULL)を使って種を作ります。
まだ時間間隔が小さいと感じるなら、適切な整数を(unsigned)time(0)または(unsigned)time(NULL)の後にかけることができます。 
例えば   srand((unsigned)time(NULL)*10)
また、タイムについてt time(0):time_tは、1970年1月1日午前0時0分0秒から現在までの経過時間を返します。単位は秒です。乱数関数のRandを生成する用法は、コードで示されているように、
運転結果は以下の通りです。
j=9
j=6
j=7
j=8
j=1
j=5
j=3
j=1
j=10
j=9
start=16185
start=16184