El algoritmo de la multiplicación de la cabina del es un algoritmo de la multiplicación que multiplica dos números binarios firmados en la notación del complemento dos.

Procedimiento

Si es el x la cuenta de los pedacitos del multiplicando, y el y es la cuenta de los pedacitos del multiplicador:
Drenaje del

una rejilla de tres filas, cada uno con las columnas para el x + y + pedacitos 1. Etiquetar las líneas respectivamente A (agregar), S (restar), y P (producto).
La notación del complemento dos, completar los primeros pedacitos del x de cada línea de: A: el multiplicando
S: la negativa del multiplicando (en formato de 2 complementos)
P: ceros
Llenar los pedacitos siguientes del y de cada línea de: A: ceros
S: ceros
P: el multiplicador
Llenar el pedacito pasado de cada línea de un cero.

hace ambos tiempos del y de los pasos:
# si son los dos pedacitos pasados en el producto…
#* 00 o 11: no hacer nada.
#* 01: P = P + el A. no hacen caso de cualquier desbordamiento.
#* 10: P = P + el S. no hacen caso de cualquier desbordamiento.
# cambio aritmético la posición de la derecha una del producto.

Gota del

que el primer (contamos de la derecha hacia la izquierda al ocuparse de los pedacitos) mordió del producto para el resultado final.

Ejemplo

× del hallazgo 3; -4, con el x = 4 y el y = 4:

A = 0011 0000 0
S = 1101 0000 0
P = 0000 1100 0

realiza el lazo cuatro veces:
# P = 0000 110 0 0 . Los dos pedacitos pasados son 00.
#* P = 0000 0110 0.
# P = 0000 011 0 0 . Los dos pedacitos pasados son 00.
#* P = 0000 0011 0.
# P = 0000 001 1 0 . Los dos pedacitos pasados son 10.
#* P = 1101 0011 0.
#* P = 1110 1001 1.
# P = 1110 100 1 1 . Los dos pedacitos pasados son 11.
#* P = 1111 0100 1.

el producto es 1111 0100, que es -12.
La técnica antedicha es inadecuada cuando el multiplicando es el número negativo más grande que puede ser representado (es decir si el multiplicando tiene 8 pedacitos entonces este valor es -128). Una corrección posible a este problema es agregar un más pedacito a la izquierda de A, de S y del P. Debajo, demostramos la técnica mejorada multiplicando -8 por 2 usar 4 pedacitos para el multiplicando y el multiplicador:
A = 1 1000 0000 0
S = 0 1000 0000 0
P = 0 0000 0010 0

realiza el lazo cuatro veces:
# P = 0 0000 001 0 0 . Los dos pedacitos pasados son 00.
#* P = 0 0000 0001 0.
# P = 0 0000 000 1 0 . Los dos pedacitos pasados son 10.
#* P = 0 1000 0001 0.
#* P = 0 0100 0000 1.
# P = 0 0100 000 0 1 . Los dos pedacitos pasados son 01.
#* P = 1 1100 0000 1.
#* P = 1 1110 0000 0.
# P = 1 1110 000 0 0 . Los dos pedacitos pasados son 00.
#* P = 1 1111 0000 0.

el producto es 11110000 (después de desechar el primer y pasado pedacito) que es -16.

Cómo trabaja

Considerar un multiplicador positivo que consiste en un bloque de 1s rodeado por 0s. Por ejemplo, 00111110. El producto se da cerca: M \ épocas \, del ^ {\ prima \ prima} 0 \; 0 \; 1 \; 1 \; 1 \; 1 \; 1 \; 0 \, ^ {\ prima \ prima} = M \ épocas (2^5 + 2^4 + 2^3 + 2^2 + 2^1) = M \ épocas 62 donde está el multiplicando M. El número de operaciones se puede reducir a dos reescribiendo iguales que el M \ épocas \, del el ^ {\ prima \ prima} 0 \; 1 \; 0 \; 0 \; 0 \; 0 \ mbox {- 1} \; 0 \, ^ {\ prima \ prima} = M \ épocas (2^6 - 2^1) = M \ épocas 62

De hecho, puede ser demostrado que cualquier secuencia de 1 en un número binario se puede romper en la diferencia de dos números binarios:

_ del (\ ^ de los ldots 0 \ overbrace {1 \ ldots 1} {n} 0 \ ldots) {2} \ (\ ^ de los ldots 1 \ overbrace {0 \ ldots 0} {n} 0 \ ldots) _ equivalente {2} - (\ ^ de los ldots 0 \ overbrace {0 \ ldots 1} {n} 0 \ ldots) _2 .

Por lo tanto, podemos substituir realmente la multiplicación por la cadena de unas en el número original operaciones más simples, agregando el multiplicador, cambiando de puesto el producto parcial formado así por los lugares apropiados, y después finalmente restando el multiplicador. Está haciendo uso del hecho de que no tenemos que hacer todo menos cambiar de puesto mientras que estamos tratando de 0s en un multiplicador binario, y somos similares a usar la característica matemática esa 99 = 100 - 1 mientras que se multiplican por 99.

Este esquema se puede ampliar a cualquier número de bloques de 1s en un multiplicador (caso incluyendo de solo 1 en un bloque). Así, M \ épocas \, del

l ^ {\ prima \ prima} 0 \; 0 \; 1 \; 1 \; 1 \; 0 \; 1 \; 0 \, ^ {\ prima \ prima} = M \ épocas (2^5 + 2^4 + 2^3 + 2^1) = M \ épocas \, del
de M \ de las épocas 58 ^ {\ prima \ prima} 0 \; 1 \; 0 \; 0 \ mbox {- 1} \; 1 \ mbox {- 1} \; 0 \, ^ {\ prima \ prima} = M \ épocas (2^6 - 2^3 + 2^2 - 2^1) = M \ épocas 58

El algoritmo de la cabina sigue este esquema realizando una adición cuando encuentra el primer dígito de un bloque de unos (0 1) y una substracción cuando encuentra el extremo del bloque (1 0). Esto trabaja para un multiplicador negativo también. Cuando los que está en un multiplicador se agrupan en bloques largos, el algoritmo de la cabina realiza pocas adiciones y substracciones que el algoritmo normal de la multiplicación.

Historia

El algoritmo fue inventado por la cabina de Andrew D. en el 1951 mientras que hacía la investigación sobre la cristalografía en la universidad de Birkbeck en el Bloomsbury, Londres . La cabina utilizó las calculadoras de escritorio que eran más rápidas en el desplazamiento que agregando y creó el algoritmo para aumentar su velocidad. El algoritmo de la cabina está de interés en el estudio de la arquitectura de computadora .

Ver también

Multiplicación ALU

.

  • Zenithic
  • Sergio Jimenez
    Random links:Búsqueda del progreso | Berimbau | La propensión marginal a consume | Desafiador del Mk VIII del crucero | Russ Berrie

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">