elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 08:36  


Tema destacado: Recuperar cuenta de Google, GMail, Youtube

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (Moderador: [D4N93R])
| | | |-+  Sencillo Algoritmo de Números Pseudoaleatorios [Aporte]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sencillo Algoritmo de Números Pseudoaleatorios [Aporte]  (Leído 488 veces)
Keyen Night


Desconectado Desconectado

Mensajes: 315


Nothing


Ver Perfil
Sencillo Algoritmo de Números Pseudoaleatorios [Aporte]
« en: 17 Septiembre 2011, 21:31 »

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
    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
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))



« Última modificación: 18 Septiembre 2011, 00:02 por Keyen Night » En línea

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

[Aporte] Factorización Relativamente Rápida
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Algoritmo numeros primos [Batch]
Scripting
Leo Gutiérrez. 4 5,026 Último mensaje 15 Junio 2009, 20:44
por SmartGenius
Algoritmo de numeros perfectos
Programación C/C++
DarkItachi 5 2,516 Último mensaje 26 Abril 2009, 14:10
por thedoctor77
Algoritmo MCD de dos números
Programación C/C++
Nork 14 5,412 Último mensaje 19 Octubre 2009, 21:28
por Nork
[APORTE] numeros primos
Java
Caballero Maldito 1 1,016 Último mensaje 2 Diciembre 2009, 21:27
por Blitzkrieg'
Maximo de 3 numeros.(sencillo y urgente por favor) « 1 2 »
Programación C/C++
Echedey 15 2,763 Último mensaje 18 Enero 2010, 19:45
por Leo Gutiérrez.
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines