Cevabın ' Matematik nedeniyle ' olduğundan şüpheleniyorum , ancak birisinin temel düzeyde biraz daha fazla fikir vermesini umuyordum ...
Bugün BCL kaynak kodunu inceliyordum, daha önce kullandığım sınıfların bazılarının gerçekte nasıl uygulandığına bir göz attım. Daha önce rastgele sayılar üretmeyi hiç düşünmemiştim, bu yüzden nasıl yapıldığını görmeye karar verdim.
Tam kaynak burada: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Bu MSEED değeri, bir Random () sınıfı her tohumlandığında kullanılır.
Her neyse, bu 'sihirli sayıyı' gördüm - 161803398 - ve bu sayının neden seçildiğine dair en sisli fikrim yok. Asal bir sayı ya da 2'nin gücü değil. Daha anlamlı görünen bir sayının 'yarısı' değildir. İkili ve onaltılı olarak baktım ve iyi, bana bir sayı gibi görünüyordu.
Google'da numarayı aramayı denedim, ancak hiçbir şey bulamadım.
The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm. For more information, see D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.
inextp = 31;
, ancak Random
sınıfın kaynak kodu, inextp = 21;
birisi bu hataya neden yanlış yazmış gibi var .