Sospecho que la respuesta es ' Debido a las matemáticas ', pero esperaba que alguien pudiera dar un poco más de información a un nivel básico ...
Estaba hurgando en el código fuente de BCL hoy, echando un vistazo a cómo se implementaron algunas de las clases que he usado antes. Nunca antes había pensado en cómo generar (pseudo) números aleatorios, así que decidí ver cómo se hacía.
Fuente completa aquí: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Este valor MSEED se usa cada vez que se siembra una clase Random ().
De todos modos, vi este 'número mágico' - 161803398 - y no tengo la menor idea de por qué se seleccionó ese número. No es un número primo o una potencia de 2. No está 'a mitad de camino' de un número que parecía más significativo. Lo miré en binario y hexadecimal y bueno, me pareció un número.
Intenté buscar el número en Google, pero no encontré nada.
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;
, pero el código fuente de la Random
clase lo tiene inextp = 21;
porque alguien lo escribió mal y causó este error .