Puedo generar un número aleatorio por mi cuenta.
Puede que pienses lo que estoy diciendo, y que has visto que las computadoras generan números aleatorios. Bueno, puedo explicar esto, pero primero veo la importancia de los números aleatorios:
- Juegos: Digamos que estás jugando ajedrez. No sería divertido si la computadora se moviera el mismo movimiento cada vez. Entonces, si la calificación final de un par de movimientos es la misma, entonces el movimiento se establece en aleatorio para que tengamos un movimiento diferente cada vez.
- Validación y prueba: los científicos e investigadores utilizan la teoría aleatoria para probar un producto. Si un producto está listo, probarlo en una entrada fija no ayudará, en su lugar, lo configurarán como prueba aleatoria. Porque puede haber alguna condición aleatoria que falla el producto que el investigador pasó por alto.
- Criptografía: cuando los expertos usan algoritmos de criptografía, usan números aleatorios como clave. Debido a que los números aleatorios tienen una alta entropía (la entropía puede estar relacionada con la imprevisibilidad), los piratas informáticos tienen dificultades para adivinar la clave.
Ahora volviendo a la respuesta, una máquina no puede hacer algo al azar. Un programa funciona en un conjunto de instrucciones definidas. Entonces, si las instrucciones son estáticas (fijas), entonces cómo puede ser diferente su resultado.
- ¿Qué se siente pasar toda una vida frente a las computadoras?
- ¿Cuál es la diferencia entre los puertos USB tipo C, mini HDMI y thunderbolt 3?
- ¿Qué pasaría si un transistor en una computadora se rompiera?
- ¿Pueden los algoritmos informáticos solos, con un mecanismo de retroalimentación, ser utilizados para administrar una ciudad?
- ¿Cómo llegó WannaCry a las computadoras?
Para programadores:
int a;
printf (“% d”, a);
¿generará un número aleatorio? NO. Mostrará el número previamente almacenado en ese bloque de memoria y se borrará su referencia.
Entonces, ¿cómo las computadoras generan un número aleatorio?
Bueno, no lo llamaré un “número aleatorio”, sino un “número pseudoaleatorio”. Tenemos que proporcionar a nuestra máquina / programa / software una función de semilla / siembra. Una semilla puede ser cualquier cosa desde la cual una computadora puede generar un número. Por ejemplo :
Si me pide que escriba algún código o algún script que genere un número aleatorio del 0 al 9, usaré la hora actual como mi semilla. Escribiré mi programa para escupir un dígito de segundo.
- el usuario ejecuta el programa a las 18:35:02 -> salida 2
- el usuario ejecuta el programa a las 5:42:47 -> salida 7
Y ese usuario pensará que mi programa está generando “verdaderos números aleatorios”.
En lugar de tomar segundos (en el tiempo) como semilla, generalmente bajamos a milisegundos porque podría haber alguna instancia en la que varios subprocesos comienzan al mismo tiempo. Si tomamos segundos, generará el mismo valor para todos los hilos en ese segundo en particular.
Usuario Quora gracias por la edición.