algoritmos de division

Upload: cesar-antonio-jimenez-vazquez

Post on 11-Jul-2015

435 views

Category:

Documents


0 download

TRANSCRIPT

ELO311 Estructuras de Computadores Digitales Algoritmos de Multiplicacin y DivisinToms Arredondo VidalEste material est basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer Organization & Design", (segunda y tercera edicin), Morgan Kaufmann, CA. 2005 material del curso anterior ELO311 del Prof. Leopoldo Silva www.wikipedia.org

Algoritmos de Multiplicacin y DivisinA continuacin se estudiarn algoritmos para efectuar las operaciones de multiplicacin y divisin entera. Usualmente estas operaciones estn soportadas por hardware dedicado, adicional a la unidad aritmtica que efecta las operaciones bsicas de sumar y restar nmeros con y sin signo. Al estudiar los algoritmos podr advertirse la naturaleza secuencial de stos, en contraposicin al carcter combinacional de las operaciones de suma y resta.

Multiplicacin como Suma RepetitivaLa operacin de multiplicacin se puede estudiar como la suma repetitiva del multiplicando las veces que indique el multiplicador. Producto = Multiplicando * MultiplicadorP: Producto R: Multiplicando Q: Multiplicador

P=R*Q

Multiplicacin como Suma Repetitiva (cont)Ejemplo: la operacin 7*3, en sistema binario puede realizarse segn: 0111*0011 = 0111 + 0111 + 0111 = 010101 Si los factores son de N dgitos, el producto puede expresarse con 2N dgitos.Con N=3 en sistema decimal se tiene que con operandos sin signo, el mayor factor es 999, y se tiene que 999 * 999 = 998.001 requiere 6 cifras. Si se considera factores positivos, pero con signo, el mayor positivo es 499 y en este caso tambin se requieren 6 dgitos para el producto: 499*499 = 249.001

Multiplicacin como Suma Repetitiva (cont)Empleando el lenguaje C, puede describirse la idea anterior segn: /* Algoritmo a P y R de largo 2N. Q largo N. Sumador ancho 2N. */ /* Q y R positivos P = R * Q */ for( j = Q; j > 0 ; j-- ) {P += R;

} Ntese que P y R deben ser de largo 2N, y el sumador tambin debe ser de largo 2N. En este algoritmo el nmero de sumas es proporcional a Q.

Multiplicacin Mediante DesplazamientosEl siguiente algoritmo, corresponde a la multiplicacin manual (con papel y lpiz) en la cual se va multiplicando las cifras del multiplicando por cada una de las cifras del multiplicador:

Puede reducirse el nmero de veces que se repite la operacin, notando que, en el sistema binario, slo debe efectuarse la suma del multiplicando si la cifra correspondiente del multiplicador es uno; ya que la multiplicacin por cero no cambia el producto parcial.

Multiplicacin Mediante Desplazamientos (cont)Entonces en lugar de efectuar todas las sumas del multiplicando (desplazado una posicin hacia la izquierda) por cada una de las cifras del multiplicador, podra efectuarse:

La deteccin si debe realizarse o no la suma del multiplicando R, puede lograrse observando solamente la cifra menos significativa de Q, siempre que despus de realizada la suma, se divida (en forma entera) el valor de Q. Esto se logra con un corrimiento hacia la derecha de Q, en una posicin. Adems el multiplicando debe desplazarse en una posicin hacia la izquierda.

Multiplicacin Mediante Desplazamientos (cont)El siguiente algoritmo desarrolla las ideas anteriores, y la suma se realiza a lo ms en N pasos; es decir una vez por cada cifra de Q. Ntese que (Q&1), determina el valor del bit menos significativo del multiplicador Q. /*Algoritmo b P y R de largo 2N. Q largo N. Sumador ancho 2N. Q y R positivos P = R * Q */ for( j = N ; j >= 0 ; j-- ) { if(Q&1) P+=R; Q=Q/2; R=R*2; }

Multiplicacin Mediante Desplazamientos (cont)Si reemplazamos la divisin y multiplicacin entera por 2, por funciones que realicen corrimientos, se tiene el siguiente algoritmo: /*Algoritmo 1 P y R de largo 2N. Q largo N Sumador ancho 2N. */ /* Q y R positivos P = R * Q */ for( j = N; j >= 0; j-- ) { if (Q&1) P += R; lls(R); lrs(Q); } Se emplean las funciones lls y lrs, por logical left shift y logical right shift respectivamente. Como los bits de signo de Q y R siempre sern ceros, pueden efectuarse corrimientos lgicos o aritmticos.

Fundamentos de Algoritmos de MultiplicacinPara analizar los algoritmos, si Q positivo( qn es cero), entonces:

El Algoritmo a, descrito usando ecuaciones de diferencias : S0 = 0 + R q0 20 S1 = S0 + R q1 21 S2 = S1 + R q2 22 S3 = S2 + R q3 23 ....... Sn-1 = Sn-2 + R qn-1 2n-1 Sn = Sn-1 + R qn 2n La cifra de Q, en la etapa i-sima, qi slo puede ser cero o uno. Si es uno, el trmino asociado se suma.

Fundamentos de Alg. de Multiplicacin (cont)El trmino R 2i es el multiplicador desplazado i posiciones hacia la izquierda. Esto justifica el algoritmo ya visto, que corresponde a la multiplicacin tradicional, efectuada con papel y lpiz. Si Q est en notacin complemento dos y Q es positivo, entonces: qn = 0. El producto final queda en Sn.

Fundamentos de Alg. de Multiplicacin (cont)El Algoritmo 1, expresado por ecuaciones de diferencias:Agregando el multiplicador anterior multiplicado por dos (ri)

S0 = 0 + R q0 20 = 0 + r0 q0 S1 = S0 + R q1 21 = S0 + r1 q1 S2 = S1 + R q2 22 = S1 + r2 q2 S3 = S2 + R q3 23 = S2 + r3 q3 ....... Sn-1 = Sn-2 + R qn-1 2n-1 Sn = Sn-1 + R qn 2n

, r0 = R , r1 = 2 r0 , r2 = 2 r1 , r3 = 2 r2

= Sn-2 + rn-1 qn-1 , rn-1 = 2 rn-2 = Sn-1 + rn qn , rn = 2 rn-1

El producto queda en Sn.

Fundamentos de Alg. de Multiplicacin (cont)Tambin pueden escribirse: q0 = Q0 & 1 , Q0 = (Q/20) q1 = Q1 & 1 , Q1 = (Q/21) = Q0/2 q2 = Q2 & 1 , Q2 = (Q/22) = Q1/2 .... qn = Qn & 1 , Qn = (Q/2n) = Qn-1/2 Resumiendo se tienen las siguientes ecuaciones: q i = Qi & 1 Si = Si-1 + riqi ri = ri-1 * 2 Qi = Qi-1 / 2 con S-1= 0 con r0 = R con Q0 = Q

Entonces en la etapa i-sima, si qi es 1, se suma al producto parcial anterior Si-1, el multiplicador anterior multiplicado por dos (que es ri).

Algoritmos ms eficientesSe desea desarrollar ahora un algoritmo ms eficiente, que emplee menos recursos electrnicos que el anterior: Estudiemos la multiplicacin binaria de (+26)*(+13) = +338

Se observa que en cada paso slo se suman 6 cifras (bits), la cifra menos significativa de la suma acumulada no afecta las sumas posteriores y puede decirse que es una cifra del producto final. Tampoco es necesario correr el multiplicando a la izquierda, si en lugar de esto se desplaza la suma (el producto parcial) hacia la derecha. De esta forma una de las entradas del sumador quedar fija con el valor del multiplicando (R). Se requiere un sumador de n+1 bits solamente.

Algoritmos ms eficientes (cont)A partir de las relaciones de recurrencia del Algoritmo 1, se proceder a obtener las ecuaciones del Algoritmo 2. Bsicamente consisten en expresar las sumas parciales en funcin solamente de R. Se comienza dividiendo por 2i: S0/20 = 0/20 + Rq0 = 0 + Rq0 = s0 S1/21 = S0/21 + Rq1 = s0/2 + Rq1 = s1 S2/22 = S1/22 + Rq2 = s1/2 + Rq2 = s2 S3/23 = S2/23 + Rq3 = s2/2 + Rq3 = s3 ....... Sn-1/2n-1 = Sn-2/2n-1 + R qn-1 = sn-2/2 + Rqn-1 = sn-1 Sn/2n = Sn-1/2n + R qn = sn-1/2 + Rqn = sn

Algoritmos ms eficientes (cont)Ordenando las relaciones anteriores y definiendo x, que representa la suma si dividida por dos: s0 = 0 + Rq0 , x0 = s0/2 , con x-1 = 0 s1 = x0 + Rq1 , x1 = s1/2 s2 = x1 + Rq2 , x2 = s2/2 s3 = x2 + Rq3 , x3 = s3/2 ....... sn-1 = xn-2 + R qn-1 , xn-1 = sn-1/2 sn = xn-1 + R qn , xn = sn/2

Algoritmos ms eficientes (cont)Si qi es uno se suma R con la suma anterior desplazada en uno hacia la derecha (xi-1). Con qn = 0 para nmero positivo. Para la etapa i-sima: qi = Qi &1 si = xi-1 + R qi con x-1 = 0 xi = si / 2 con s0 = 0 Qi = Qi-1 / 2 con Q0 = Q Si qi es uno se suma R con la suma anterior desplazada en uno hacia la derecha (xi-1). Si qi es cero slo se desplazan hacia la derecha las variables s y Q.

Algoritmos ms eficientes (cont)/*Algoritmo 2 s, Q y R de largo n+1. Sumador ancho n+1 */ /* Q y R positivos. Al salir sQ= R * Q */ for(i=0, s = 0; i=0; j--) { if(P>=R) { P-=R; lls(P,Q); Q++; } else lls(P,Q); } Overflow = bit ms significativo de Q.

Algoritmos de Multiplicacin en MIPSLas operaciones de corrimiento se realizan mucho ms rpido que las multiplicaciones. Dado que se emplean redes combinacionales para los corrimientos. Entonces un compilador C, la expresin a = a * 8 la ensamblara, si a est en $s0, segn: sll $s0, $s0, 3 Recordar que el resultado de una multiplicacin, ocupa el doble del tamao de los operandos. La expresin, en C: a = b * c Se compila, suponiendo b en $s2, c en $s3. El resultado se obtiene como la parte ms significativa de a en $s0 y la menos significativa en $s1: mult $s2, $s3 mfhi $s0 mflo $s1