この質問に答えるには、まずrand()コードを調べる必要があります。
Rand Implementationから:
void __cdecl srand (unsigned int seed)
{
#ifdef _MT
_getptd()->_holdrand = (unsigned long)seed;
#else /* _MT */
holdrand = (long)seed;
#endif /* _MT */
}
int __cdecl rand (void)
{
#ifdef _MT
_ptiddata ptd = _getptd();
return(((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) &
0x7fff);
#else /* _MT */
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
#endif /* _MT */
}
あなたが見ることができるように、ランダムな値がシード値に基づいて計算(と新しいシード値が計算されます)され、我々は、これらの数字は、擬似ランダム呼ぶ理由、thatsの。とでテストを実行することができます今
int firstRand(unsigned int seed) {
return (((seed * 214013L + 2531011L) >> 16) & 0x7fff);
}
とを:我々は最初の実行でinterstedているので、コードを少し簡略化することができます、最初のランドを()入力シードを取る関数を記述し、返すことができますこの機能:
for (i = 0; i < 50; ++i) {
printf("seed = %u; rand = %d\n", seed + i, firstRand(seed + i));
}
ここで私はこの結果を得た:
だから、
seed = 1333783311; rand = 19779
seed = 1333783312; rand = 19783
seed = 1333783313; rand = 19786
seed = 1333783314; rand = 19789
seed = 1333783315; rand = 19792
seed = 1333783316; rand = 19796
seed = 1333783317; rand = 19799
seed = 1333783318; rand = 19802
seed = 1333783319; rand = 19805
seed = 1333783320; rand = 19809
seed = 1333783321; rand = 19812
seed = 1333783322; rand = 19815
seed = 1333783323; rand = 19819
seed = 1333783324; rand = 19822
seed = 1333783325; rand = 19825
seed = 1333783326; rand = 19828
seed = 1333783327; rand = 19832
seed = 1333783328; rand = 19835
seed = 1333783329; rand = 19838
seed = 1333783330; rand = 19841
seed = 1333783331; rand = 19845
seed = 1333783332; rand = 19848
seed = 1333783333; rand = 19851
seed = 1333783334; rand = 19854
seed = 1333783335; rand = 19858
seed = 1333783336; rand = 19861
seed = 1333783337; rand = 19864
seed = 1333783338; rand = 19868
seed = 1333783339; rand = 19871
seed = 1333783340; rand = 19874
seed = 1333783341; rand = 19877
seed = 1333783342; rand = 19881
seed = 1333783343; rand = 19884
seed = 1333783344; rand = 19887
seed = 1333783345; rand = 19890
seed = 1333783346; rand = 19894
seed = 1333783347; rand = 19897
seed = 1333783348; rand = 19900
seed = 1333783349; rand = 19903
seed = 1333783350; rand = 19907
seed = 1333783351; rand = 19910
seed = 1333783352; rand = 19913
seed = 1333783353; rand = 19917
seed = 1333783354; rand = 19920
seed = 1333783355; rand = 19923
seed = 1333783356; rand = 19926
seed = 1333783357; rand = 19930
seed = 1333783358; rand = 19933
seed = 1333783359; rand = 19936
seed = 1333783360; rand = 19939
、あなたが見ることができるように種子が接近している場合、値はおそらくに近くなり、そしてあなたが現在を使用するので時間、200あなたが走ったテストはすべて、お互いに近いシード値を持っていました。
time(NULL)現在の時刻を秒単位で返します。より良い結果を得るには、時間をミリ秒単位で使用する必要があります(実際に2回の実行の間に多くの値を変更する必要がある場合は、その上で何らかの操作を行います)。
[Dilbertあり](http://search.dilber t。com/comic /ランダム%20Nine):-) – kay
あなたの問題は何ですか? –
100回以上実行すると、1回目の投げは頭で起こります。その出来事のオッズは信じられないほど小さいですので、私はどこかに問題があると仮定しています...私は以前の実行と、すべての第一投げに加えて、コマンドラインから、ではないのXcodeから30回、それを実行した は頭でした。 – sheddd