Я подозреваю, что ответ « Из-за математики », но я надеялся, что кто-то может дать немного больше понимания на базовом уровне ...
Сегодня я копался в исходном коде 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;
потому что кто-то опечатал ее, вызвав эту ошибку .