Necesito una semilla para una instancia de la clase Random
de C#, y he leído que la mayoría de las personas usa el contador de tics de la hora actual para esto. Pero ese es un valor de 64 bits y la semilla necesita ser un valor de 32 bits. Ahora pensé que el método GetHashCode()
, que devuelve int
, debería proporcionar un valor razonablemente distribuido para su objeto y esto puede usarse para evitar usar solo los 32 bits más bajos del conteo de ticks. Sin embargo, no pude encontrar nada sobre el GetHashCode() del tipo de datos Int64
.Siembra de un generador de números pseudoaleatorios en C#
Por lo tanto, sé que no va a importar mucho, pero el siguiente funciona tan bien como creo (no puedo aleatoriedad de prueba y error), o tal vez funciona igual que el uso de (int)DateTime.Now.Ticks
como semilla ? ¿O tal vez incluso funciona peor? ¿Quién puede arrojar algo de luz sobre esto?
int seed = unchecked(DateTime.Now.Ticks.GetHashCode());
Random r = new Random(seed);
Editar: ¿Por qué necesito una semilla y no dejar que el constructor Random()
hacer el trabajo? Necesito enviar la semilla a otros clientes que usan la misma semilla para la misma secuencia aleatoria.
Olvidó escribir su * argumento realmente bueno * para necesitar una semilla. –
Bueno, agregué ese _muy buen argumento_ ahora. :) – Virtlink