Sie sind auf Seite 1von 7

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
Bibliografía.
1. Introducción.
2. Suma y resta en coma flotante.
3. Producto y división en coma flotante.
4. 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, D.A. PATTERSON. Computer Architecture. Morgan
Kauffman, 2003.
 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.

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


Alinear las mantisas
desempaquetar los operandos
originales.
Sumar/restar las
mantisas
 En la etapa final hay que
empaquetar el resultado, Normalizar la mantisa
resultante
respetando los anchos
especificados por el estándar y ¿Exponente mayor Sí
eliminando la parte entera de la que el máximo?

mantisa. No
Infinito positivo
¿Exponente menor Sí o negativo
que el mínimo?
No
Representar número en
Redondear la forma desnormalizada
mantisa resultante

No ¿Todavía está
normalizada?

Fin
7

Circuitos para coma flotante

Suma y resta en coma flotante


Sign Exponent Significand Sign Exponent Significand
 En función del signo
de las mantisas de los
Compare operandos y del tipo de
Small ALU exponents
operación, el circuito de
Exponent
control seleccionará la
difference UAL grande para
0 1 0 1 0 1
realizar una suma o
Shift smaller
una resta.
Control Shift right
number right

 La UAL pequeña
Big ALU
Add simplemente resta los
exponentes para
0 1 0 1 calcular la longitud del
Increment or
Normalize
desplazamiento que
decrement Shift left or right
hay que aplicar a la
mantisa del número con
Round
Rounding hardware
menor módulo.

Sign Exponent Significand


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).

Circuitos para coma flotante

3. Producto en coma flotante


A = m a ⋅ 2 exp ⎫
a

exp ⎬
⇒ R = A ⋅ B = (m a ⋅ mb ) ⋅ 2 exp a + expB

B = mb ⋅ 2 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
A ⎛m ⎞ − expB
exp ⎬
⇒ R = = ⎜⎜ a ⎟⎟ ⋅ 2 exp a

B = mb ⋅ 2 b
⎭ B ⎝ mb ⎠
 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 Inicio

desempaquetar los operandos Sumar/restar los


originales. exponentes

Multiplicar/dividir las
 Habitualmente se trabaja con mantisas
mantisas normalizadas, para lo
cual es necesario: Normalizar la mantisa
resultante
•Normalizar los operandos que
estén desnormalizados. ¿Exponente mayor Sí
•Contar con un bit más para que el máximo?

ampliar el rango del No


Infinito positivo
exponente. ¿Exponente menor Sí o negativo
que el mínimo?

 En la etapa final hay que No


Redondear la
Representar número en
forma desnormalizada
empaquetar el resultado, mantisa resultante

respetando los anchos


No ¿Todavía está
especificados por el estándar y normalizada?
eliminando la parte entera de la Sí

mantisa. 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

Das könnte Ihnen auch gefallen