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 laRandom
clase lo tieneinextp = 21;
porque alguien lo escribió mal y causó este error .Respuestas:
No, pero se basa en Phi (la "proporción áurea").
Más sobre la proporción áurea aquí .
Y una muy buena lectura para el matemático casual aquí .
Y encontré un trabajo de investigación sobre generadores de números aleatorios que está de acuerdo con esta afirmación. (Ver página 53.)
fuente
"One can’t even fathom the repercussions if security flaws in the implementation (or design) of the SSL protocol are to be found."
(página 4)Este número se toma de la proporción áurea 1.61803398 * 10 ^ 8 . Matt dio una buena respuesta de qué es este número, por lo tanto, solo explicaré un poco sobre un algoritmo.
Este no es un número especial para este algoritmo. El algoritmo es el algoritmo generador de números aleatorios sustractivos de Knuth y sus puntos principales son:
El generador se basa en la siguiente recursividad: X n = (X n-55 - X n-24 ) mod m, donde n ≥ 0. Este es un caso parcial de generador de Fibonacci rezagado : X n = (X n-j @ X n-k ) mod m, donde 0 <k <j y @ es cualquier operación binaria (resta, suma, xor).
Hay varias implementaciones de este generador. Knuth ofrece una implementación en FORTRAN en su libro. Encontré el siguiente código , con el siguiente comentario:
Se puede encontrar un poco más aquí. Tenga en cuenta que, en realidad, este no es un trabajo de investigación (como afirma Math), es solo una tesis de maestría.
La gente en la criptografía gusta usar número irracional (
pi
,e
,sqrt(5)
), porque no es una conjetura que los dígitos de un número tan aparece con la misma frecuencia y por lo tanto tienen una alta entropía . Puede encontrar esta pregunta relacionada en el intercambio de pila de seguridad para obtener más información sobre dichos números. Aquí hay una cita:fuente