El Método Congruencial Lineal Mixto es el más utilizado en simulación en computadoras digitales y esta basado en una relación de recurrencia que ademas utiliza el operador MOD.
El objetivo de los GCL es generar un valor aleatorio a partir de otro anterior
El GCL Mixto esta definido como:
Donde:
Xo : Semilla del generador Xo > 0
a: Constante multiplicativa a>0
c: Constante aditiva c>0
m: modulo m>a; m>Xo ; m>c
La suma (a*Xo+c) será dividida por «m» y «Xn+1» será el residuo de la división
Xn : es el valor base anterior
Xn+1 : es el nuevo valor uniforme entero
rn : es el número aleatorio normalizado
GENERADOR UNIX
El Sistema Operativo UNIX soporta el siguiente GCL mixto:
Implementado este en lenguaje java tenemos
import java.math.*; /** * @web http://jc-mouse.net/ * @author Mouse */ public class Unix { // parametros del generador private BigInteger xn=new BigInteger("0"); //semilla private final BigInteger a = new BigInteger("1103515245"); //Multiplicador private final BigInteger m = new BigInteger("2").pow(32); //Modulo private final BigInteger c = new BigInteger("12345"); //Constante aditiva private int precision = 5;//cantidad de digitos despues del punto decimal /** Constructor de clase */ public Unix(){} public BigInteger getXn() { return xn; } public void setXn(BigInteger xn) { this.xn = xn; } public int getPrecision() { return precision; } public void setPrecision(int precision) { this.precision = precision; } /** * Metodo que obtiene un numero aleatorio entre 0 y 1 * * @param No existe parametros de entrada * @return El numero aleatorio estandar */ public BigDecimal next() { //xn = (a * xn + c) % m ; xn = ((xn.multiply(a)).add(c)).mod(m); BigDecimal x = new BigDecimal( xn.floatValue() / m.floatValue() ).setScale( precision, BigDecimal.ROUND_HALF_UP); return x; } }
Realizando un test para un valor semilla Xo de 111 para una cantidad de 100 números aleatorios tenemos:
Unix unix = new Unix(); unix.setXn( new BigInteger( "111" ) ); unix.setPrecision( 5 ); for( int i=1 ; i<=100 ; i++){ System.out.println( unix.next() ); }
enjoy!!! 🙂
El patrón de desbloqueo es una medida de seguridad que tienen algunos teléfonos inteligentes para evitar el acceso al di[...]
En este tutorial crearemos una aplicación que bloqueara toda la pantalla de la PC y no nos dejara realizar ninguna tarea[...]
Un JList nos permite almacenar objetos en una lista y mostrarlos gráficamente en una serie vertical en el cual el usuari[...]
En este tutorial realizaremos un proyecto web de un «sitio multi lenguaje» o «web multi idiomas» como prefieran llamarlo[...]
En este post crearemos una aplicación android que nos permitirá compartir una imagen con Facebook, whatsapp, bluetooth,[...]
JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el[...]