Я підозрюю, що відповідь - " Через математику ", але я сподівався, що хтось зможе дати трохи більше розуміння на базовому рівні ...
Я сьогодні роздумував над вихідним кодом BCL, дивлячись на те, як реально реалізувались деякі класи, якими я користувався раніше. Я ніколи не замислювався над тим, як генерувати (псевдо) випадкові числа, тому вирішив подивитися, як це робиться.
Повне джерело тут: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Це значення MSEED використовується щоразу, коли запускається клас Random ().
У всякому разі, я бачив це "магічне число" - 161803398 - і не маю найменшого уявлення про те, чому було обрано це число. Це не просте число чи потужність 2. Це не "на півдорозі" до числа, яке здавалося більш значущим. Я дивився на це в двійковій і шістнадцятковій формі, і добре, мені це просто схоже на число.
Я намагався шукати номер в Google, але нічого не знайшов.
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;, але вихідний код Randomкласу має це так, inextp = 21;тому що хтось неправильно вводив його, викликаючи цю помилку .