sairus black dijo:
Perdon si te ofendi bro pero me cayo el comentario en muy mal momento....en fin te dire que las limitaciones comienzan por el echo de que ese algoritmo que tu mensionas es recursivo...cosa que es indecible en assembler (a menos que se usan macros, que no es el caso)....no se bro tal vez colocaste el post a la ligera y sin mala intencion...o tal ves lo hayas logrado sacar en assembler usando macros y no lo tubiste presente...de todas formas creo que si me pase con el comentario...y me disculpo por ello.
Pero no cambio mi afirmacion el algoritmo de congruencia lineal es inaplicable al asm de 16 o 32 bits, dadas las necesidades de recursion y abstraccion que son propias de los lenguajes de alto nivel y que no aplican a los lenguajes ensabladores dado que estos son solo una representacion simbolica de las instrucciones propias de la maquina.
No hay problema. El asunto es que yo no dije lo primero que se me ocurrió. Tampoco me las estoy dando de nada (lo digo por si esa es la impresión que doy).
Mira, el método del que hablo es recursivo en su definición, pero no estamos obligados a usar recursividad dado que
no necesitamos obtener un valor específico de la secuencia. Únicamente nos interesa el "siguiente". Por lo tanto, el valor "anterior" (el primero de los cuales es nuestra
semilla) puede almacenarse en una variable estática, y listo.
Teniendo en cuenta que la fórmula es:
X
n+1 = (
aX
n +
c) mod
m
Podemos obtener el siguiente número aleatorio con éstas dos "instrucciones":
X
sig = (
aX
ant +
c) mod
m
X
ant = X
sig
Siempre y cuando, X
ant haya sido inicializado con nuestra
semilla en alguna parte al inicio del programa.
....
El único problema que nos daría una CPU de 16bits tal vez sería que la secuencia más larga no lo es tanto como para usar la función aleatoria en cuestiones de simulación u otras cosas más complicadas. Pero igual, CPU de 16bits que se respete, nos permite obtener resultados de 32bits en
double words. No será tan sencillo, como en una CPU de 32bits, pero de que se puede, se puede.