Coma Flotante.

Anuncio
Universidad
Rey Juan Carlos
ESTRUCTURA Y TECNOLOGÍA DE
COMPUTADORES
Circuitos para coma flotante
Luis Rincón Córcoles
Licesio J. Rodríguez-Aragón
Circuitos para coma flotante
Programa
1.
2.
3.
4.
Bibliografía.
Introducción.
Suma y resta en coma flotante.
Producto y división en coma flotante.
Instrucciones para coma flotante en ensamblador.
2
Circuitos para coma flotante
Bibliografía
 D.A. PATTERSON, J.L. HENNESSY. Estructura y Diseño de Computadores.
Reverté, 2000.
ÂJ.L. HENNESSY,
Kauffman, 2003.
D.A.
PATTERSON.
Computer
Architecture.
Morgan
 DORMIDO, S. CANTO M.A., MIRA J., DELGADO A.E. Estructura y Tecnología
de Computadores. 2ª edición. Sanz y Torres, 2000.
 PARHAMI, B. Computer Arithmetic. Oxford University Press, 2000.
 P. DE MIGUEL. Fundamentos de los Computadores. 7ª edición. Paraninfo,
1999.
 W. STALLINGS. Organización y Arquitectura de Computadores. 5ª edición,
Prentice Hall, 2000.
3
Circuitos para coma flotante
1. Introducción
 Los computadores utilizan dos representaciones claramente diferenciadas para
cantidades numéricas:
•Coma fija: para números enteros sin signo o complemento a 2.
•Coma flotante (floating point, FP): para números muy grandes o muy pequeños
o con parte fraccionaria.
 Inicialmente cada modelo de computador tenía su propia manera de representar
números en coma flotante.
•Problemas a la hora de asegurar la transportabilidad de los programas y datos.
 En 1977 se formó un comité de expertos del IEEE cuyo objetivo era definir un
documento estándar para los futuros desarrollos que utilizaran coma flotante.
•Finalmente en 1985 el comité hizo oficial el estándar IEEE 754.
 En 1987 otro comité de expertos del IEEE propuso un estándar para coma
flotante independiente de la base de numeración utilizada: el IEEE 854.
•Este estándar no implica ninguna modificación del IEEE 754.
4
Circuitos para coma flotante
Introducción
 La coma flotante permite representar los números reales en forma aproximada.
•Es preciso aplicar cuidadosamente técnicas de redondeo.
•En los programas no se debe testear la igualdad de dos números en coma flotante.
 El estándar IEEE 754 permite formatos extendidos para aumentar la precisión:
•Simple extendido: mayor precisión que el formato simple y menor que el formato doble.
•Doble extendido: mayor precisión que el formato doble.
•Trabajar con estos formatos facilita el redondeo.
 Dado que la realización de operaciones con datos en coma flotante es compleja,
los computadores cuentan con circuitos específicos dedicados a ello.
•Los computadores de potencia baja trabajaban en coma flotante mediante software.
•Con el microprocesador 8086 de Intel surgieron los coprocesadores de coma flotante:
chips específicos que, trabajando en paralelo con los microprocesadores, realizaban las
operaciones de coma flotante (8087 y sucesivos).
•Con los avances en tecnología de integración de circuitos, hace años que los
coprocesadores de coma flotante se integran en el chip del microprocesador.
 Hay circuitos de coma flotante para operaciones de suma, resta, producto,
división, raíz cuadrada, logaritmos, exponenciales, funciones trigonométricas, etc.
5
Circuitos para coma flotante
2. Suma y resta en coma flotante
 Lo primero es desempaquetar los operandos (dividirlos en campos).
 Después hay que igualar los exponentes de los dos operandos.
•Se calcula k =⏐ExpA – ExpB⏐ y se desplaza la mantisa de menor exponente k lugares
hacia la derecha.
 A continuación, se suman o se restan las mantisas MA y MB.
•La mantisa resultante MR puede no estar normalizada.
•El exponente resultante ExpR es el mayor de los dos operandos fuente.
 Después se normaliza MR y se modifica ExpR si es preciso (postnormalización).
 Se comprueba que el exponente resultante está en el rango permitido.
•Si ExpR<Expmin ⇒ subdesbordamiento: desnormalizar e ir al paso de redondeo.
•Si ExpR>Expmax ⇒ ± infinito: poner valor especial y empaquetar.
•En ambos casos podría generarse una excepción.
 Se redondea la mantisa MR (en este punto MR se puede desnormalizar).
•Si MR se desnormaliza, hay que volver al paso de postnormalización.
•Si MR sigue normalizada, empaquetar el resultado (unir los campos) y salir.
6
Circuitos para coma flotante
Suma y resta en coma flotante
Inicio
 En la etapa de inicio hay que
desempaquetar los operandos
originales.
Alinear las mantisas
Sumar/restar las
mantisas
 En la etapa final hay que
empaquetar el resultado,
respetando los anchos
especificados por el estándar y
eliminando la parte entera de la
mantisa.
Normalizar la mantisa
resultante
¿Exponente mayor
que el máximo?
Sí
No
¿Exponente menor
que el mínimo?
No
Redondear la
mantisa resultante
No
Sí
Infinito positivo
o negativo
Representar número en
forma desnormalizada
¿Todavía está
normalizada?
Sí
Fin
7
Circuitos para coma flotante
Suma y resta en coma flotante
Sign
Exponent
Significand
Sign
Exponent
Significand
Compare
exponents
Small ALU
Exponent
difference
0
1
0
Control
1
0
Shift smaller
number right
Shift right
Big ALU
0
1
0
Increment or
decrement
Exponent
Add
1
Shift left or right
Rounding hardware
Sign
1
Significand
Normalize
Round
 En función del signo
de las mantisas de los
operandos y del tipo de
operación, el circuito de
control seleccionará la
UAL grande para
realizar una suma o
una resta.
 La UAL pequeña
simplemente resta los
exponentes para
calcular la longitud del
desplazamiento que
hay que aplicar a la
mantisa del número con
menor módulo.
8
Circuitos para coma flotante
Suma y resta en coma flotante
 Al desempaquetar operandos normalizados es preciso incluir el bit implícito
como parte entera de la mantisa, que no estaba almacenado en el dato original.
•Como MR ∈ (-4,4), usaremos dos bits para el módulo de la parte entera de las mantisas
fuente (que tendrán la forma: s01’...) y para la mantisa resultado.
 Dado que el resultado de la operación puede estar desnormalizado, el paso de
postnormalización exige un circuito complejo.
•El incrementador / decrementador para postnormalizar será un sumador / restador.
 La UAL grande tendrá que generar resultados de al menos 1+2+m+t bits:
•El primer bit sería el de signo.
•Los dos siguientes serían para la parte entera de la mantisa.
•Los m siguientes serían para el ancho almacenable de la parte entera de la mantisa.
•Los últimos t bits serían para redondear.
 La UAL pequeña admitiría operandos de n+1 bits (n: ancho del exponente).
9
Circuitos para coma flotante
3. Producto en coma flotante
A = m a ⋅ 2 exp ⎫
⇒ R = A ⋅ B = (m a ⋅ mb ) ⋅ 2 exp
exp ⎬
B = mb ⋅ 2
⎭
a
a
+ expB
b
 Lo primero es desempaquetar los operandos (dividirlos en campos).
 Después se pueden realizar las dos operaciones siguientes en paralelo:
•Sumar los exponentes ExpA y ExpB para obtener ExpR.
•Multiplicar las mantisas MA y MB para obtener MR.
 Después se normaliza MR ajustando ExpR si es preciso.
 Se comprueba que el exponente resultante está en el rango permitido.
•Si ExpR<Expmin ⇒ subdesbordamiento: desnormalizar, empaquetar y salir.
•Si ExpR>Expmax ⇒ ± infinito: empaquetar y salir.
•En ambos casos podría generarse una excepción.
 Se redondea la mantisa MR.
•Si MR se desnormaliza, hay que volver al paso de normalización.
•Si MR sigue normalizada, empaquetar el resultado y salir.
10
Circuitos para coma flotante
División en coma flotante
A = m a ⋅ 2 exp ⎫
A ⎛m ⎞
⇒ R = = ⎜⎜ a ⎟⎟ ⋅ 2 exp
exp ⎬
B ⎝ mb ⎠
B = mb ⋅ 2
⎭
a
a
− expB
b
 Lo primero es desempaquetar los operandos (dividirlos en campos).
 Después se pueden realizar las dos operaciones siguientes en paralelo:
•Restar los exponentes ExpA y ExpB para obtener ExpR.
•Dividir las mantisas MA y MB para obtener MR.
 Después se normaliza MR ajustando ExpR si es preciso (postnormalización).
 Se comprueba que el exponente resultante está en el rango permitido.
•Si ExpR<Expmin ⇒ subdesbordamiento: desnormalizar, empaquetar y salir.
•Si ExpR>Expmax ⇒ ± infinito: empaquetar y salir (¿producir excepción?).
 Se redondea la mantisa MR.
•Si MR se desnormaliza, hay que volver al paso de normalización.
•Si MR sigue normalizada, empaquetar el resultado y salir.
11
Circuitos para coma flotante
Producto y división en coma flotante
 En la etapa de inicio hay que
desempaquetar los operandos
originales.
Inicio
Sumar/restar los
exponentes
Multiplicar/dividir las
mantisas
 Habitualmente se trabaja con
mantisas normalizadas, para lo
cual es necesario:
•Normalizar los operandos que
estén desnormalizados.
•Contar con un bit más para
ampliar el rango del
exponente.
 En la etapa final hay que
empaquetar el resultado,
respetando los anchos
especificados por el estándar y
eliminando la parte entera de la
mantisa.
Normalizar la mantisa
resultante
¿Exponente mayor
que el máximo?
Sí
No
¿Exponente menor
que el mínimo?
No
Redondear la
mantisa resultante
No
Sí
Infinito positivo
o negativo
Representar número en
forma desnormalizada
¿Todavía está
normalizada?
Sí
Fin
12
Circuitos para coma flotante
Producto y división en coma flotante
 Las dos operaciones son similares, con lo cual gran parte del circuito para
ambas puede ser común:
•Un sumador / restador para los exponentes como la UAL pequeña del
circuito de suma / resta (sumador para el producto, restador para la división).
•Un multiplicador en coma fija que admita operandos fuente de m+1 bits (m:
ancho de la mantisa almacenada).
•Un divisor en coma fija que admita operandos de m+1 bits.
 Si las mantisas están normalizadas se facilita la postnormalización, ya que:
•El módulo de la mantisa producto estará en el rango [1,4).
•El módulo de la mantisa cociente estará en el rango [1/2,2).
 Por tanto, puede ser conveniente normalizar previamente las mantisas fuente
que estén desnormalizadas:
•A la hora de operar, se añadiría un bit a la representación interna del
exponente.
13
Circuitos para coma flotante
4. Instrucciones ensamblador para coma flotante
MIPS
 Tiene instrucciones de coma flotante, ejecutadas por el coprocesador 1 (que se
encuentra dentro del microprocesador).
 Los nemotécnicos son similares a las operaciones con enteros con signo, pero
con un sufijo indicativo de la precisión de los operandos:
•Precisión simple: .s
•Precisión doble: .d
MC68000
 El MC68000 no tiene circuitería para coma flotante.
 M68881: coprocesador externo de coma flotante para IEEE 754 de precisión
simple y doble.
•Tiene un formato interno extendido de 80 bits.
 Las instrucciones de coma flotante comienzan por el código 1111.
•Producen una excepción de emulación.
14
Descargar