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!!! 🙂
¿Qué es una vista? Una vista (View) o Tabla Virtual, es una forma lógica de ver los datos ubicados en varias tablas, es[...]
Hola 🙂 publicando de tiempo les dejo esta chiti librería java para convertir números a su equivalente literal. La librer[...]
Shutter Encoder es un software de conversión de video el cual tambien maneja audio e imagenes. Su interfaz de usuario ha[...]
Continuación del tutorial «Utiliza 2 bases de datos diferentes en una aplicación» La Interfaz frmSelected.java: Haciendo[...]
Magic Button, es un botón animado para android bajo licencia del MIT desarrollado por Bloder (Brasil), el proyecto esta[...]
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a[...]