Saya menduga jawabannya adalah ' Karena Matematika ', tetapi saya berharap seseorang dapat memberikan sedikit lebih banyak wawasan di tingkat dasar ...
Saya mencari-cari kode sumber BCL hari ini, melihat bagaimana beberapa kelas yang saya gunakan sebelumnya benar-benar diimplementasikan. Saya tidak pernah berpikir tentang cara membuat angka acak (semu) sebelumnya, jadi saya memutuskan untuk melihat bagaimana hal itu dilakukan.
Sumber lengkap di sini: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Nilai MSEED ini digunakan setiap kali kelas Random () diunggulkan.
Bagaimanapun, saya melihat 'angka ajaib' ini - 161803398 - dan saya tidak memiliki ide foggiest mengapa nomor itu dipilih. Ini bukan bilangan prima atau kekuatan 2. Ini bukan 'setengah jalan' ke nomor yang tampak lebih signifikan. Saya melihatnya dalam biner dan hex dan well, itu hanya tampak seperti angka bagi saya.
Saya mencoba mencari nomor di Google, tetapi saya tidak menemukan apa pun.
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;
, tetapi kode sumber Random
kelas memilikinya inextp = 21;
karena ada yang salah ketik yang menyebabkan bug ini .