
Los números pseudoaleatorios son esenciales para muchas aplicaciones informáticas, como los juegos y la seguridad. En los juegos, los números aleatorios proporcionan elementos impredecibles a los que el jugador puede responder, como esquivar una bala aleatoria o sacar una carta de la parte superior de un mazo.
En seguridad informática, la pseudoaleatoriedad es importante en los algoritmos de cifrado, que crean códigos que no deben predecirse ni adivinarse.
¿Qué es un PRNG?
Un generador de números pseudoaleatorios, o PRNG, es cualquier programa o función que utiliza las matemáticas para simular la aleatoriedad. También puede llamarse DRNG (generador de números aleatorios digital) o DRBG (generador de bits aleatorio determinista).
Las matemáticas a veces pueden ser complejas, pero en general, usar un PRNG requiere solo dos pasos:
- Proporcionar el PRNG con una semilla arbitraria.
- Pregunte por el siguiente número al azar.
El valor semilla es un "punto de partida" para crear números aleatorios. El valor se utiliza al calcular los números. Si el valor semilla cambia, los números generados también cambian, y un solo valor semilla siempre producirá los mismos números. Por esta razón, los números no son realmente aleatorios, porque la verdadera aleatoriedad nunca podría volver a crearse.
La hora actual se usa a menudo como un valor semilla único. Por ejemplo, si es 5 de marzo de 2018, a las 5:03 PM y 7.01324 segundos UTC, eso se puede expresar como un número entero. Ese tiempo preciso nunca volverá a ocurrir, por lo que un PRNG con esa semilla debe producir un conjunto único de números aleatorios.
Nota: Ser capaz de reproducir una secuencia generada aleatoriamente puede ser útil. En aplicaciones académicas, se puede generar una secuencia masiva de valores aleatorios para una simulación, y luego reproducirse exactamente para un análisis más detallado más adelante. Como otro ejemplo, en los juegos de computadora, si un jugador carga una partida guardada, cualquier evento "aleatorio" puede ser el mismo que si el juego nunca se detuviera. De esa manera, el jugador no puede volver a cargar el mismo juego repetidamente para intentar tener mejor suerte.
Cómo generar un número pseudoaleatorio.
Las siguientes son algunas formas en que puede crear un número pseudoaleatorio en programas y lenguajes de programación comunes.
Símbolo del sistema de Windows
En el símbolo del sistema de Windows, o en un archivo por lotes, la variable de entorno especial % RANDOM% produce un número pseudoaleatorio entre 0 y 32767, que se suma al momento en que se inició el símbolo del sistema.
echo "Entonces% RANDOM%!"
"Así que 27525!"
Para crear un archivo por lotes que genere un número aleatorio entre 1 y 100:
copy con sorandom.bat echo off set / a myrand =% RANDOM% * 100/32768 + 1 echo El número en el que estaba pensando era% myrand%. ¿Lo entendiste correctamente?
Presione Ctrl + Z y Enter para guardar el archivo por lotes. Luego, ejecute el archivo:
tan aleatorio
El número en el que estaba pensando era 91. ¿Lo entendiste bien?
Windows PowerShell
El cmdlet Get-Random genera un número aleatorio entre 0 y 2, 147, 483, 647 (el valor máximo de un entero sin signo de 32 bits).
Get-Random
1333190525
El cmdlet tiene una serie de opciones, como un valor mínimo y máximo. Los valores se redondean hacia abajo, de modo que para generar un número entre 1 y 100, establezca el máximo en 101:
Get-Random -Minimum 1 -Maximum 101
99
Microsoft Excel
En una hoja de cálculo de Excel, la fórmula = RAND () generará un número aleatorio entre 0 y 1. Por ejemplo, si resalta una celda e ingresa = RAND (), la celda contendrá un número que cambiará cuando la hoja sea -calculado.

Este método también funciona en otras aplicaciones de hoja de cálculo, como LibreOffice Calc y Google Sheets.
En lenguajes de programacion
La mayoría de los lenguajes de programación tienen sus propias funciones de PRNG. Aquí hay algunos ejemplos comunes:
do
En el lenguaje de programación C, las funciones PRNG se definen en la biblioteca estándar, stdlib . La forma común de inicializar el generador aleatorio es con la función time (), declarada en time.h. El número generado se encuentra entre 0 y la constante RAND_MAX, un número entero específico del sistema que se garantiza que sea al menos 32767.
#include #include #include void main () {srand (time (NULL)); / * siembra el generador * / int rand1 = rand (); / * un entero pseudoaleatorio entre 0 y RAND_MAX * / printf ("Número aleatorio entre 0 y% d:% d \ n", RAND_MAX, (int) rand1); / * O, dentro de un rango específico: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ("Número aleatorio entre% d y% d:% d (% f) \ n", min, max, round, rand2); regreso; }
Salida:
Número aleatorio entre 0 y 2147483647: 1789080047 Número aleatorio entre 0 y 100: 74 (74.369179)
C ++
En C ++:
#include #include #include int main () {srand (time (NULL)); std :: cout << "Número aleatorio entre 0 y" << RAND_MAX << ":" << rand () << "\ n" << "Número aleatorio entre 1 y 100:" << (rand ()% 100) + 1 << std :: endl; devuelve 0; }
Salida:
Número aleatorio entre 0 y 2147483647: 126569208 Número aleatorio entre 1 y 100: 9
Python 3
El módulo aleatorio en Python ofrece una variedad de funciones para generar números aleatorios. En este ejemplo, usamos tres métodos diferentes para encontrar un entero aleatorio en un rango.
importar aleatoriamente desde datetime importar datetime random.seed (datetime.now ()) print ("Número aleatorio en el rango [0, 1):", random.random ()) # Dentro de un rango. Todos hacen lo mismo: imprimir ("Número aleatorio entre 1 y 100:", redondo (random.random () * 100) + 1) imprimir ("Número aleatorio entre 1 y 100:", random.randrange (1, 101)) imprimir ("Número aleatorio entre 1 y 100:", random.randint (1, 100))
Salida:
Número aleatorio en el rango [0, 1): 0.05137418896158319 Número aleatorio entre 1 y 100: 27 Número aleatorio entre 1 y 100: 80 Número aleatorio entre 1 y 100: 80
Perl 5
En Perl:
srand (tiempo); # cambia una vez por segundo imprime "Número aleatorio en el rango [0, 1):", rand (), "\ n"; imprima "Número aleatorio dentro del rango [1, 100]:", int (rand (101)), "\ n";
Salida:
Número aleatorio dentro del rango [0, 1): 0.691379946963028 Número aleatorio dentro del rango [0, 100]: 82
JavaScript
console.log ("Número aleatorio en el rango [0, 1):" + Math.random ()); console.log ("Número aleatorio en el rango [1, 100]:" + Math.floor (Math.random () * 101));
Vea la salida en la consola de JavaScript de su navegador web (por ejemplo, en Firefox presione Ctrl + Shift + K ):
Número aleatorio dentro del rango [0, 1): 0.305008216755414 Número aleatorio dentro del rango [1, 100]: 8
Nota: no es posible sembrar la función Math.random () en JavaScript. Si necesita un PRNG robusto en JavaScript, consulte mejores números aleatorios para JavaScript en GitHub.
Ejemplo PRNG: widget de JavaScript
Usando el widget a continuación, puede agregar un PRNG y usarlo para generar números aleatorios.
Cada vez que genera un número aleatorio a partir de su semilla, su desplazamiento aumenta en 1. El primer número generado desde la semilla tiene un cero de compensación, el segundo tiene un 1, etc. El generador siempre produce el mismo número para una semilla y un offset dados .
Ingrese lo que desee en el campo para crear una semilla única.
Use el botón Generar para obtener el siguiente número aleatorio usando esa semilla, e incremente el desplazamiento.
Utilice el botón Restablecer para restablecer el desplazamiento a cero.
número generado a partir de semilla :
Restablecer la compensación de semilla (actualmente 0 )
Este widget utiliza los scripts de código abierto de Johannes Baagøe, Alea.js y Mash.js.
Seguridad informática, programación, términos software