Gracias, mascara.mascara escribió: 19 Abr 2018 11:49Por si te sirve. He hecho un programa basándome en el código de una función que existe en el sistema con el que trabajo que da un número aleatorio.
Sí, me sirve y confirma la sugerencia de Rango Starr de usar en el tiempo también años, meses y dias, además de horas. minutos y segundos.
Si no he ente4ndido mal tu código, lo que haces es aplicar el siguinte algoritmo:
X(n + 1) = (67301 * X(n) + 1) mod (2^32).
Y tomando como semilla la fecha-tiempo en segundos.
¿He entendido bien?
Bien, he descubierto que en ProRealTime hay una función Dates, que devuelve los días transcurridos desde 1900.
Entonces, en ProRealTime podríamos tomar como semilla los segundos desde 1900: 86400 * Dates + 3600 * CurrentHour + 60 * CurrentMinute + CurrentSecond.
Y, se podría hacer con un poco de habilidad, darle la vuelta a los dígitos de la semilla para añadir más "aletoriedad". Por ejempo, supongamos que days = 43098 y time = 17:06:51. Entonces 86400 * 43098 + 3600 * 17 + 60 * 6 + 51 = 3723728811. Y si le damos la vuelta a los dígitos tenemos la siguiente semilla:
1188273273
Aquí tengo algunas preguntas:
¿Por qué 2^32? Si nos conformásemos con obtener números aleatorios de 8 dígitos, ¿podríamos usar 2^n, con n menor que 32?
¿Por qué 67301? ¿Es porque cada M = 2^n, tiene un número óptimo, y el de n = 32, tiene número óptimo 67301?
Saludos.