Los Numeros Aleatorios Estan en Todos Lados
Los numeros aleatorios alimentan todo, desde juegos y simulaciones hasta criptografia e investigacion cientifica. Pero no todos son creados iguales - entender la diferencia importa.
Pseudo-Aleatorio vs Verdaderamente Aleatorio
| Tipo | Fuente | Velocidad | Caso de Uso |
|---|---|---|---|
| Pseudo-aleatorio (PRNG) | Algoritmo matematico | Muy rapido | Juegos, simulaciones, pruebas |
| Criptografico (CSPRNG) | Pool de entropia del SO | Rapido | Seguridad, tokens, contrasenas |
| Verdaderamente aleatorio (TRNG) | Fenomenos fisicos | Lento | Loterias, investigacion cientifica |
En JavaScript
// Pseudo-aleatorio (NO criptograficamente seguro)
Math.random() // 0 a 1
Math.floor(Math.random() * 100) + 1 // 1 a 100
// Criptograficamente seguro
const array = new Uint32Array(1);
crypto.getRandomValues(array);
const seguro = array[0]; // 0 a 4,294,967,295
// Entero aleatorio en rango (seguro)
function enteroAleatorio(min, max) {
const rango = max - min + 1;
const array = new Uint32Array(1);
crypto.getRandomValues(array);
return min + (array[0] % rango);
}Casos de Uso Comunes
- Juegos: Lanzamiento de dados, barajeo de cartas, generacion procedural
- Seguridad: Generacion de contrasenas, tokens de sesion, nonces
- Pruebas: Fuzz testing, datos de prueba aleatorios, simulaciones Monte Carlo
- Estadistica: Muestreo, bootstrapping, experimentos aleatorizados
- Arte: Arte generativa, texturas procedurales, musica
Las Distribuciones Importan
No todo lo aleatorio debe ser uniforme. Diferentes distribuciones sirven diferentes propositos:
- Uniforme: Probabilidad igual en el rango (dados, loteria)
- Normal (Gaussiana): Curva de campana, mayoria de valores cerca de la media (alturas, calificaciones)
- Exponencial: Modela tiempo entre eventos (solicitudes de servidor, decaimiento radioactivo)
- Poisson: Conteo de eventos en un periodo (llamadas por hora, visitas al sitio)
El Problema del Sesgo
Usar modulo (%) para restringir un numero aleatorio a un rango introduce sesgo cuando el rango no divide uniformemente el rango de origen. Para aplicaciones criticas, usa muestreo por rechazo.
Genera numeros aleatorios con rangos personalizados usando el Generador de Numeros Aleatorios de PureTools. Define valores minimo y maximo, elige cuantos numeros generar y obtiene resultados criptograficamente seguros al instante.