Maybe there is a very logic explanation for this, but I just can't seem to understand why the seeds 0
and 2,147,483,647
produce the same "random" sequence, using .NET's Random Class (System).
Quick code example:
var random1 = new Random(0);
var random2 = new Random(1);
var random3 = new Random(int.MaxValue); //2,147,483,647
var buffer1 = new byte[8];
var buffer2 = new byte[8];
var buffer3 = new byte[8];
random1.NextBytes(buffer1);
random2.NextBytes(buffer2);
random3.NextBytes(buffer3);
for (int i = 0; i < 8; i++)
{
Console.WriteLine("{0}\t\t{1}\t\t{2}", buffer1[i], buffer2[i], buffer3[i]);
}
Output:
26 70 26
12 208 12
70 134 76
111 130 111
93 64 93
117 151 115
228 228 228
216 163 216
As you can see, the first and the third sequence are the same. Can someone please explain this to me?
EDIT: Apparently, as alro pointed out, these sequences are not the same. But they are very similar.
Well, the reason will be connected with whatever derivation function is used by the Random class to derive a pseudo-random sequence from the seed. The real answer, therefore, is mathematical (and beyond my ability).
Indeed - I don't believe there's any guarantee that two different seeds will necessarily produce different sequences anyway.
Edit Okay - I'm going to do what bitbonk has done - but explain why:
We don't actually need to go too far into the code to see why - reading the code from top to bottom these are the values that will be stored by the above code when the seed is
0
and when the seed is2147483647
:After just the very first loop, algorithm has already converged for the two seed values.
Edit
As has been pointed out on the question - the sequences aren't the same - but they are clearly very very similar - and here we can see the reason for that similarity.