DICCIONARIO DE INFORMÁTICA Y TECNOLOGÍA
  ¿Qué significa pseudoaleatoriedad? - Información sobre pseudoaleatoriedad

Definición de pseudoaleatoriedad (informática)

Leandro Alegsa (Contacto) 2018-05-03

Envíanos un mensaje


Enviar
Anuncios

Los números pseudoaleatorios son números generados por computadoras. No son verdaderamente aleatoriedad porque, cuando una computadora funciona correctamente, nada es aleatorio.

Las computadoras son dispositivos deterministas (por diseño, el comportamiento de una computadora es completamente predecible). Por lo tanto para crear algo impredecible las computadoras emplean algoritmos matemáticos para producir números que son “suficientemente aleatorios”.


¿Cuándo son empleados los números pseudoaleatorios?

Los números pseudoaleatorios son esenciales para múltiples aplicaciones de computadoras, desde juegos hasta seguridad.

En videojuegos los números aleatorios proveen elementos impredecibles a los que debe responder el jugador ya sea esquivar una bala aleatoria o sacar una carta de una baraja que fue barajada aleatoriamente.

En seguridad informática, la aleatoriedad es importante en los algoritmos de cifrado que deben crear códigos que no puedan ser predichos o adivinados.


¿Qué es un PRNG?

Del inglés pseudo-random number generator o generador de números pseudoaleatorios, es un programa o una función que emplea matemática para simular aleatoriedad. También puede ser llamado generador de números aleatorios digital (DRNG: digital random number generator) o también generador de bit aleatorio determinístico (DRBG: deterministic random bit generator).

La matemática para la aleatoriedad puede ser compleja, pero, en general, usar un PRNG requiere solo de dos pasos:

1. Proveer al PRNG con una semilla (seed) arbitraria.
2. Preguntar por el siguiente número aleatorio.

El valor semilla (seed value) es un punto de inicio para crear números aleatorios. El valor es empleado cuando se crear los números pseudoaleatorios. Si el valor de la semilla cambia, los números generados también y un mismo valor de semilla producirá siempre los mismos números. Por esta razón los números no son realmente aleatorios, porque la verdadera aleatoriedad no debería ser capaz de recrearse.

El tiempo actual es usualmente empleado como valor único de semilla. Por ejemplo, la fecha 15 de septiembre de 2017 a las 3:20 PM y 4.02356 segundos UTC, puede ser expresado en un número entero. Esa fecha específica no volverá a ocurrir nunca, por lo tanto un PRNG con esa semilla producirá un único conjunto de números aleatorios.


Cómo generar números aleatorios en computadoras

En la línea de comandos de Windows o un archivo BAT: puede emplearse la variable de entorno %RANDOM% que producirá un número aleatorio entre 0 y 32767. Su semilla es la fecha-hora en el momento de ejecutar el comando.


Por ejemplo:

echo “Numero aleatorio: %RANDOM%”.


En el programa de hojas de cálculo Excel, en Google Sheets y en Libreoffice Calc se puede emplear la fórmula =RAND(). Producirá un número entre 0 y 1. Por ejemplo: 0,534319. Cada vez que abrimos la hoja de cálculo cambiará el valor.


Generar números aleatorios en programación

La mayoría de los lenguajes de programación tiene sus propias funciones PRNG.


En lenguaje C:

Se emplea la librería stdlib. La forma usual para la semilla es emplear la función time() definida en time.h. El número generado aleatoriamente caerá entre 0 y la constante RAND_MAX, un entero garantizado por sistema que será hasta 32767.

Código de ejemplo:


#include
#include
#include

void main () {

srand(time(NULL)); /* se le da la semilla al generador */
int rand1 = rand(); /* genera un entero entre 0 y RAND_MAX */
printf("El número aleatorio entre 0 y %d: %d
", RAND_MAX, (int)rand1);


/* Generar un numero aleatorio dentro de un rango... */

int min = 0;
int max = 100;
float rand2 = (float)rand() * max / RAND_MAX + 1;
int round = (int)rand2;
printf("Numero aleatorio entre %d y %d: %d (%f)
", min, max, round, rand2);
return;

}




C++


#include
#include
#include

int main () {

srand(time(NULL));
std::cout << "Numero aleatorio entre 0 y " << RAND_MAX << ": " << rand() << "
"
<< "Numero aleatorio entre 1 y 100: " << (rand() % 100) + 1 << std::endl;
return 0;

}



JavaScript

En este caso no es posible dar un valor semilla al JavaScript; si se requiere una aleatoriedad más robusta leer: Github.com


console.log("Numero aleatorio en el rango [0,1): " + Math.random());
console.log("Numero aleatorio en el rango [1,100]: " + Math.floor(Math.random() * 101));






¿Mejoramos la definición?
Puntos: 0 (0 votos)







Respondemos tus consultas o comentarios a continuación:


¿Dudas? ¿necesita más información? Escriba y responderemos a tu email: clic aquí



 




  Diccionario de informática
  Búsqueda por letras:

A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z - 0,9
 
Búsqueda por categorías
:

Almacenamiento - Aplicaciones - Audio - Compresión - Desarrollo web - Discos ópticos - Inteligencia Artificial - Memorias - Microprocesadores - Seguridad informática - Sistemas de archivos - Terminología de programación - UNIX - Windows - ver categorías

 
Búsqueda por palabras:






Preguntas

No hay ningún comentario todavía

Todos los derechos reservados © 1998 - 2018 - ALEGSA - Santa Fe, Argentina.
Políticas del sitio web - Contacto - Publicidad