Aritmetica Computacional 3ª Parte: División

Anuncio
22/03/2012
La división es una de las operaciones menos
frecuentes.
 Revisemos la forma de ejecutarla

Arquitectura de Computadoras
Primavera 2012
Divisor
1 0 0 1
Cociente
1 0 0 0 1 0 0 1 0 1 0
Dividendo
- 1 0 0 0
1 0
1 0 1
1 0 1 0
- 1 0 0 0
1 0

La relación entre los componentes de la
división es la siguiente:
Dividendo  Cociente  Divisor  Resto

El resto es menor que el cociente

En la división se debe tener cuidad con la
división por cero que causa un error
matemático
Resto

No hay forma de saber de antemano si el
divisor es mas pequeño que el dividendo

Por lo cual, el divisor se resta del dividendo y
si el resultado es
 Positivo (mayor o igual que cero),
▪ Se produce un 1 en el cociente
 Negativo (men0r que cero),
▪ Se regresa al número original por medio de sumar el
divisor y se produce un cero en el cociente
Inicio
1. Resta el divisor del resto y pon
el resultado en el registro del
resto
Resto ≥ 0
Iteración
0
Resto < 0
Prueba el
Resto
2b. Restaura el valor original por medio de sumar el
divisor al resto y pon el resultado de la suma en el
registro del resto. También, recorre el registro del
cociente a la izquierda y pon el LSB a cero
2a. Corre el registro del cociente a la
izquierda, pone el bit mas a la derecha a 1
1
2
3
3. Corre el registro del divisor a la derecha 1 bit
4
No
Repetición
33?
Si
Fin
5
Cociente
Divisor
Resto
Valores iníciales
0000
0010 0000
0000 0111
1: Resto = Resto – Div
Paso
0000
0010 0000
1110 0111
2b: Resto < 0  +Div, sll Q, Q0 = 0
0000
0010 0000
0000 0111
3: Corre Div a la derecha
0000
0001 0000
0000 0111
1: Resto = Resto – Div
0000
0001 0000
1111 0111
2b: Resto < 0  +Div, sll Q, Q0 = 0
0000
0001 0000
0000 0111
3: Corre Div a la derecha
0000
0000 1000
0000 0111
1: Resto = Resto – Div
0000
0000 1000
1111 1111
2b: Resto < 0  +Div, sll Q, Q0 = 0
0000
0000 1000
0000 0111
3: Corre Div a la derecha
0000
0000 0100
0000 0111
1: Resto = Resto – Div
0000
0000 0100
0000 0011
2a: Resto ≥ 0  sll Q, Q0 = 1
0001
0000 0100
0000 0011
3: Corre Div a la derecha
0001
0000 0010
0000 0011
1: Resto = Resto – Div
0001
0000 0010
0000 0001
2a: Resto ≥ 0  sll Q, Q0 = 1
0011
0000 0010
0000 0001
3: Corre Div a la derecha
0011
0000 0001
0000 0001
1
22/03/2012

El resultado final es:
 Cociente: 0011 = 3
Corrimiento derecho
Divisor
64-bits
 Resto: 0000 0001 = 1
64-bit ALU

32-bits
Dividendo  Cociente  Divisor  Resto
64-bits
Resto
7  3 2 1

Cociente
Por lo cual el resultado cumple con:
La división con signo requiere que se indique
cual es el signo del resto

Control
Corrimiento derecho
Analicemos que pasa con 7 ÷ 2
 En este caso el cociente es 3 para determinar el
resto usamos la siguiente formula

Dividendo  Cociente  Divisor  Resto

Resto  Dividendo  Cociente  Divisor
Recuerden que la siguiente ecuación siempre
se debe cumplir:
Analicemos los casos cuando tenemos ±7 y ±2
 Resto = 7 – (3 × 2 ) = 1

Ahora si tomamos el caso -7 ÷ 2
 El cociente es -3
 Resto = -7 – (-3 × 2 ) = -7 – (-6) = -7+6 = -1
 Checando el resultado 7 = (-3 × 2 ) + (-1) = -6 -1

Sin embargo los siguientes números también
satisfacen la formula
 Cociente = -4
 resto
= +1
 Checando el resultado -7 = (-4 × 2 ) + (+1) = -8 + 1

Para evitar este comportamiento anómalo se
toma como regla que el dividendo y el resto
siempre deben tener el mismo signo
Cociente y Resto
Comprobando
+7 ÷ +2
Caso
Cociente = +3, Resto = +1
7 = 3 × 2 + (+1)
=6+1
-7 ÷ +2
Cociente = -3, Resto = -1
-7 = -3 × 2 + (-1)
= -6 – 1
+7 ÷ -2
Cociente = -3, Resto = +1
7 = -3 × (-2) + (+1) = 6 + 1
-7 ÷ -2
Cociente = +3, Resto = -1
-7 = 3 × (-2) + (-1) = -6 – 1
Por lo tanto, el algoritmo de división con signo debe:
• Negar el cociente si los signos del dividendo y divisor
son diferente
• Hacer el signo del resto y el dividendo sean iguales
2
22/03/2012



El hardware para la multiplicación puede servir
para realizar la división también.
Instrucción
Ejemplo
 Sobreflujo
 División por cero. Esta debe ser prevenida por
software
Arquitectura de Computadoras
Primavera 2012
Comentario
División con signo div $s1,$s2
Divide el contenido del
Lo = $s2/$s3
registro S1 entre el registro S2
Hi = $s1 mod $s2 . El cociente es almacenado en
Lo y el resto en Hi
División sin signo
divu $s1,$s2
Divide el contenido del
registro S1 entre el registro
Lo = $s2/$s3
S2. Asume que ambos
Hi = $s1 mod $s2 números son sin signo. El
cociente es almacenado en Lo
y el resto en Hi
Mueve desde Hi
mfhi $s1
$s1 = Hi
Obtiene el resto de la división
Mueve desde Lo
mflo $s2
$s2 = Lo
Obtiene el cociente de la
división
Por lo cual MIPS ofrece la oportunidad de
realizar divisiones
Sin embargo, el hardware para la división no
distingue:
significado

Los números de punto flotante nos ayudan a
representar números reales tales como:
 pi = 3.1416
 e = 2.71828
 3,1555,760,000 = 3.15576 × 109
Los números flotantes se encuentran
expresados en notación científica
 Los números en notación científica que no
tienen ceros al principio son denominados
números normalizados, ejemplo:

 1.0025 × 109

Esta misma notación puede ser empleada
para los números binarios
 1.0 × 2-1

Los números flotantes nos ayudan a
representar números muy pequeños o
números muy grandes que no podrían ser
representados como números enteros

Estos números son llamados números de punto
flotante porque representan números donde el
punto binario no esta fijo.

Estos números tienen el siguiente formato:
1.yyyyy × 2xxxxx

Este formato ofrece los siguientes beneficios:
 Simplifica el intercambio de información
 Simplifica los algoritmos aritméticos
 Incrementa la exactitud de los números almacenados
en un palabra
3
22/03/2012
La representación de punto flotante debe
encontrar un balance entre la fracción y el
exponente
 Este balance es entre la precisión y el rango

 Incrementar el tamaño de la fracción incrementa
la precisión
 Incrementar el exponente incrementa el rango de



 1S  F  2E
31
30 – 23
22 - 0
signo
Exponente
Fracción
1 bit
8 bits
23 bits

Esto permite que en MIPS podamos representar números
tan pequeños como 2×10-38 y números tan grande como
2×1038

Los números de punto flotantes presentan otra
evento además del sobreflujo.

El sobreflujo se produce cuando se quiere
representar un número muy grande.

Sin embargo, el underflow se produce cuando se
requiere representar un número muy pequeño.

El underflow se produce cuando el exponente
negativo es muy grande para ser representado
dentro del campo del exponente
Una estrategia para poder decrementar la
probabilidad de que existan tanto sobreflujos
como underflow es un segundo formato con
un campo de exponente mas amplio

Precisión simple
Este formato se le conoce como número de
punto flotante de doble precisión.

los números que pueden ser representados

Los números en punto flotante en MIPS son representados
de la siguiente manera:

Los números de punto flotante nos ayudan a
representar números muy grandes, pero
existe la posibilidad de requerir un número
mayor al que puede ser representado
El sobreflujo en los números flotantes indica
un número en el que su exponente es muy
grande para ser representado dentro del
campo del exponente (8-bits)
 En C se distingue entre precisión simple y doble
por medio de usar las palabras reservadas float y
double
 Signo: 1 bit
 Exponente: 8 bits
32 bits
 Fracción: 23 bits
Precisión doble
 Signo: 1 bit
 Exponente: 11 bits
64 bits
 Fracción: 52 bits
4
22/03/2012
El estándar para números de punto flotante
es conocido como: IEEE 754
 El estándar define al numero de punto
flotante de la siguiente manera:

1Signo  1  Fraccion  2E Bias

Represente el numero 9.75
 9.7510 = 1001.112
 9.7510 = 1.001112 × 23

Por lo que en su representacion en formato
IEEE 754 es:
10  1  .00111 2130127
donde el bias = 127 para precisión simple y
1023 para doble precisión
10  1  .00111 2130127



Considere los números 9.999×101 y 1.610×10-1
asuma que solo se pueden usar 3 dígitos para la
parte fraccionaria y uno para la parte entera
 Paso 1: Para poder sumarlos, primero debemos alinear el
Por lo que el numero es:
punto decimal en ambos números quedando
▪ 9.999×101 y 0.016×101
31
30 – 23
22 - 0
signo
Exponente
Fracción
0
1000 0010
001 1100 0000 0000 0000 0000
 Paso 2: Enseguida sumamos los números sin su
exponente:
Signo
Exponente
9 . 9
9
9
+
0 . 0
1
6
1
0 . 0
1
5
Fracción
Signo
Exponente
Fracción
ALU

Paso 3: Sin embargo, el numero no esta
expresado en notación científica
normalizada. Por lo cual deberá ser
normalizado
 10.015×101 se normaliza a 1.0015×102

Paso 4: Solo se pueden representar 3 dígitos
en la parte fraccionaria así que el numero se
redondea a:
 1.002×102
0
Diferencia de
Exponentes
0
1
1
Shift Der.
0
1
Control
0
ALU
1
0
Incremento o
Decremento
1
Shift Der. o Izq
Hardware de Redondeo
Signo
Exponente
Fracción
5
22/03/2012

Considere la multiplicación de los números
1.110×1010 y 9.200×10-5

 El producto no se encuentra normalizado, por lo que se
debe normalizar
 Paso 1: Los exponentes deben ser sumados
▪ 10.212 × 105 = 1.0212 × 106

▪ Nuevo exponente = 10 + (-5) = 5
×
1
1.
1
1
0
9.
2
0
0
0
0
0
0
0
0
0
0
2
2
2
0
9
9
9
0
0.
2
1
2
0
Paso 4:
 Asumiendo que solo podemos representar 3 dígitos de la
 Paso 2: Enseguida se realiza la multiplicación de la parte
significativa
Paso 3:
parte fraccionaria, debemos redondear el número
▪ 1.021 × 106

Paso 5: Establecer el signo del resultado.
 El signo se establece en base a los operandos, si los
operandos tiene signos diferentes, el resultado es
negativo, de lo contrario es positivo
▪ +1.021 × 106
0
0
6
Descargar