Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Keyen Night en 17 Septiembre 2011, 21:31 pm



Título: Sencillo Algoritmo de Números Pseudoaleatorios [Aporte]
Publicado por: Keyen Night en 17 Septiembre 2011, 21:31 pm
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
  1.    Public Function RandomEx(ByVal Min As Long, ByVal Max As Long, Optional ByVal Count As ULong = 1) As Long()
  2.  
  3.        RandomEx = New Long() {}
  4.  
  5.        Dim Seed As Long = Date.Now.Ticks
  6.  
  7.        Do While RandomEx.Length <> Count
  8.            Array.Resize(RandomEx, RandomEx.Length + 1)
  9.            RandomEx.SetValue((Seed Mod (Max + 1)) + Min, RandomEx.Length - 1)
  10.            Seed -= Math.Floor(Seed / (Count + 1))
  11.        Loop
  12.  
  13.    End Function

Básicamente esto se encarga de colocar a Seed entre Min y Max
Código:
(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.
Código:
Seed -= Math.Floor(Seed / (Count + 1))