Sencillo Algoritmo de Números Pseudoaleatorios [Aporte]

Iniciado por Keyen Night, 17 Septiembre 2011, 21:31 PM

0 Miembros y 1 Visitante están viendo este tema.

Keyen Night

Estuve prácticando hacer un algoritmo sencillo para generar números aletorios porque ya saben el de Visual Studio tiene muchos errores no me gusta :silbar:

El principal problema es la semilla que siempre usamos, datos que cambian constantemente como los Ticks del sistema o la hora, pero lamentablemente los procesadores de hoy en día trabajan tan rápido que en un milisegundo se producen miles de números "aletorios" con la misma semilla, y obtenemos horribles patrones o muchos números repetidos.

La función obtiene una cantidad Count de valores entre Min y Max de números pseudoaleatorios.

Código (vb.net,9,10) [Seleccionar]
   Public Function RandomEx(ByVal Min As Long, ByVal Max As Long, Optional ByVal Count As ULong = 1) As Long()

       RandomEx = New Long() {}

       Dim Seed As Long = Date.Now.Ticks

       Do While RandomEx.Length <> Count
           Array.Resize(RandomEx, RandomEx.Length + 1)
           RandomEx.SetValue((Seed Mod (Max + 1)) + Min, RandomEx.Length - 1)
           Seed -= Math.Floor(Seed / (Count + 1))
       Loop

   End Function


Básicamente esto se encarga de colocar a Seed entre Min y Max
(Seed Mod (Max + 1)) + Min

Y esto de mantener a Seed diferente en cada vuelta del búcle, la fórmula asegura que Seed siempre será diferente sin causar Overflow.
Seed -= Math.Floor(Seed / (Count + 1))

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...