
16/03/2009, 09:50
|
 | | | Fecha de Ingreso: junio-2006 Ubicación: 7F.00.00.01
Mensajes: 123
Antigüedad: 18 años, 7 meses Puntos: 5 | |
Respuesta: Generar números aleatorios [Matemáticas] Tengo entendido que las funciones 'rand' generalmente trabajan con varias tablas de numeros de determinada cantidad de valores y luego por medio de la fecha y hora (realmente los microsegundos creo) se selecciona determinada tabla y de acuerdo al numero de veces que llamas la funcion se escoje el elemento.
Por ejemplo:
Tu tienes 2 tablas de numeros aleatorios con 5 valores cada uno:
A: 5, 1, 2, 4, 3
B: 9, 6, 7, 0, 8
Entonces dependiendo del tiempo actual, se podira seleccionar la tabla nose A y como es la primera vez, entonces te da el primer elemento que tiene el valor 5.
Luego en una segunda vez que se llame la funcion, y te vuelve a dar la tabla A, esta vez te dara el segundo elemento: el valor 1
En una tercera vez que llames la funcion puede que use esta vez la tabla B y otro valor de la secuencia.
Estas tablas con estos valores y los algoritmos para escoger el valor han hido adaptandose con el tiempo, para hacerlos lo "mas aleatorio posible", pero la idea de los algoritmos genericos creo que es esa.
Al numero de la tabla y al valor que se escoje es lo que se llama 'semilla'.
En muchos lenguajes es comun encontrar una instruccion que especifique al generador de numeros aleatorios que se use el tiempo como un valor de donde se obtenga esa semilla. Entonces si no la inicializabas con el tiempo veias que siempre te generaban la misma secuencia de numeros.
El problema de estos algoritmos aunque es sencilla su implementacion no te otorgan numeros realmente aleatorios. ya que esas tablas siempre van a tener una secuencia fija de numeros, y si por ejemplo si repitieras la consulta en las mismas condiciones (aunque es bastante dificil) hay una alta probabilidad que te generen el mismo numero.
Es por eso, segun lei una vez que muchas de esas tablas ahora las estaban capturando de una fuente real de entropia (caos, desorden, que es afectado por muchas variables) como el ruido generado por una señal de un radio. Entonces se capturaba todo ese ruido y se transformaba en valores "aleatorios".
Ahora no entiendo si necesitabas solo entender el funcionamiento de "rand" o es que quieres hacer una funcion realmente de numeros aleatorios o que es lo que busques, si es para usar en un programa normal, con la funcion que viene en los lenguajes de programación creo que es más que suficiente.
__________________ Saludos. "Cualquier tonto puede escribir código que un computador entiende. Los buenos programadores escriben código que los humanos pueden entender. ;)" |