07.05.2013 Views

Suma y resta en coma flotante - DAC - Universidad Rey Juan Carlos

Suma y resta en coma flotante - DAC - Universidad Rey Juan Carlos

Suma y resta en coma flotante - DAC - Universidad Rey Juan Carlos

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Universidad</strong><br />

<strong>Rey</strong> <strong>Juan</strong> <strong>Carlos</strong><br />

ESTRUCTURA Y TECNOLOGÍA DE<br />

COMPUTADORES<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

Luis Rincón Córcoles


Programa<br />

Bibliografía.<br />

1. Introducción.<br />

2. <strong>Suma</strong> y <strong>resta</strong> <strong>en</strong> <strong>coma</strong> <strong>flotante</strong>.<br />

3. Producto y división <strong>en</strong> <strong>coma</strong> <strong>flotante</strong>.<br />

4. Instrucciones para <strong>coma</strong> <strong>flotante</strong> <strong>en</strong> <strong>en</strong>samblador.<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

2


Bibliografía<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

D.A. PATTERSON, J.L. HENNESSY. Estructura y Diseño de Computadores.<br />

Reverté, 2000.<br />

J.L. HENNESSY, D.A. PATTERSON. Computer Architecture. Morgan<br />

Kauffman, 2003.<br />

DORMIDO, S. CANTO M.A., MIRA J., DELGADO A.E. Estructura y Tecnología<br />

de Computadores. 2ª edición. Sanz y Torres, 2000.<br />

PARHAMI, B. Computer Arithmetic. Oxford University Press, 2000.<br />

P. DE MIGUEL. Fundam<strong>en</strong>tos de los Computadores. 7ª edición. Paraninfo,<br />

1999.<br />

W. STALLINGS. Organización y Arquitectura de Computadores. 5ª edición,<br />

Pr<strong>en</strong>tice Hall, 2000.<br />

3


1. Introducción<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

Los computadores utilizan dos repres<strong>en</strong>taciones claram<strong>en</strong>te difer<strong>en</strong>ciadas para<br />

cantidades numéricas:<br />

•Coma fija: para números <strong>en</strong>teros sin signo o complem<strong>en</strong>to a 2.<br />

•Coma <strong>flotante</strong> (floating point, FP): para números muy grandes o muy pequeños<br />

o con parte fraccionaria.<br />

Inicialm<strong>en</strong>te cada modelo de computador t<strong>en</strong>ía su propia manera de repres<strong>en</strong>tar<br />

números <strong>en</strong> <strong>coma</strong> <strong>flotante</strong>.<br />

•Problemas a la hora de asegurar la transportabilidad de los programas y datos.<br />

En 1977 se formó un comité de expertos del IEEE cuyo objetivo era definir un<br />

docum<strong>en</strong>to estándar para los futuros desarrollos que utilizaran <strong>coma</strong> <strong>flotante</strong>.<br />

•Finalm<strong>en</strong>te <strong>en</strong> 1985 el comité hizo oficial el estándar IEEE 754.<br />

En 1987 otro comité de expertos del IEEE propuso un estándar para <strong>coma</strong><br />

<strong>flotante</strong> indep<strong>en</strong>di<strong>en</strong>te de la base de numeración utilizada: el IEEE 854.<br />

•Este estándar no implica ninguna modificación del IEEE 754.<br />

4


Introducción<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

La <strong>coma</strong> <strong>flotante</strong> permite repres<strong>en</strong>tar los números reales <strong>en</strong> forma aproximada.<br />

•Es preciso aplicar cuidadosam<strong>en</strong>te técnicas de redondeo.<br />

•En los programas no se debe testear la igualdad de dos números <strong>en</strong> <strong>coma</strong> <strong>flotante</strong>.<br />

El estándar IEEE 754 permite formatos ext<strong>en</strong>didos para aum<strong>en</strong>tar la precisión:<br />

•Simple ext<strong>en</strong>dido: mayor precisión que el formato simple y m<strong>en</strong>or que el formato doble.<br />

•Doble ext<strong>en</strong>dido: mayor precisión que el formato doble.<br />

•Trabajar con estos formatos facilita el redondeo.<br />

Dado que la realización de operaciones con datos <strong>en</strong> <strong>coma</strong> <strong>flotante</strong> es compleja,<br />

los computadores cu<strong>en</strong>tan con circuitos específicos dedicados a ello.<br />

•Los computadores de pot<strong>en</strong>cia baja trabajaban <strong>en</strong> <strong>coma</strong> <strong>flotante</strong> mediante software.<br />

•Con el microprocesador 8086 de Intel surgieron los coprocesadores de <strong>coma</strong> <strong>flotante</strong>:<br />

chips específicos que, trabajando <strong>en</strong> paralelo con los microprocesadores, realizaban las<br />

operaciones de <strong>coma</strong> <strong>flotante</strong> (8087 y sucesivos).<br />

•Con los avances <strong>en</strong> tecnología de integración de circuitos, hace años que los<br />

coprocesadores de <strong>coma</strong> <strong>flotante</strong> se integran <strong>en</strong> el chip del microprocesador.<br />

Hay circuitos de <strong>coma</strong> <strong>flotante</strong> para operaciones de suma, <strong>resta</strong>, producto,<br />

división, raíz cuadrada, logaritmos, expon<strong>en</strong>ciales, funciones trigonométricas, etc.<br />

5


2. <strong>Suma</strong> y <strong>resta</strong> <strong>en</strong> <strong>coma</strong> <strong>flotante</strong><br />

Lo primero es desempaquetar los operandos (dividirlos <strong>en</strong> campos).<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

Después hay que igualar los expon<strong>en</strong>tes de los dos operandos.<br />

•Se calcula k =⏐Exp A – Exp B ⏐ y se desplaza la mantisa de m<strong>en</strong>or expon<strong>en</strong>te k lugares<br />

hacia la derecha.<br />

A continuación, se suman o se <strong>resta</strong>n las mantisas M A y M B.<br />

•La mantisa resultante M R puede no estar normalizada.<br />

•El expon<strong>en</strong>te resultante Exp R es el mayor de los dos operandos fu<strong>en</strong>te.<br />

Después se normaliza M R y se modifica Exp R si es preciso (postnormalización).<br />

Se comprueba que el expon<strong>en</strong>te resultante está <strong>en</strong> el rango permitido.<br />

•Si ExpR Expmax ± infinito: poner valor especial y empaquetar.<br />

•En ambos casos podría g<strong>en</strong>erarse una excepción.<br />

Se redondea la mantisa M R (<strong>en</strong> este punto M R se puede desnormalizar).<br />

•Si M R se desnormaliza, hay que volver al paso de postnormalización.<br />

•Si M R sigue normalizada, empaquetar el resultado (unir los campos) y salir.<br />

6


<strong>Suma</strong> y <strong>resta</strong> <strong>en</strong> <strong>coma</strong> <strong>flotante</strong><br />

En la etapa de inicio hay que<br />

desempaquetar los operandos<br />

originales.<br />

En la etapa final hay que<br />

empaquetar el resultado,<br />

respetando los anchos<br />

especificados por el estándar y<br />

eliminando la parte <strong>en</strong>tera de la<br />

mantisa.<br />

No<br />

Inicio<br />

Alinear las mantisas<br />

<strong>Suma</strong>r/<strong>resta</strong>r las<br />

mantisas<br />

Normalizar la mantisa<br />

resultante<br />

¿Expon<strong>en</strong>te mayor<br />

que el máximo?<br />

No<br />

¿Expon<strong>en</strong>te m<strong>en</strong>or<br />

que el mínimo?<br />

No<br />

Redondear la<br />

mantisa resultante<br />

¿Todavía está<br />

normalizada?<br />

Sí<br />

Fin<br />

Sí<br />

Sí<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

Repres<strong>en</strong>tar número <strong>en</strong><br />

forma desnormalizada<br />

Infinito positivo<br />

o negativo<br />

7


<strong>Suma</strong> y <strong>resta</strong> <strong>en</strong> <strong>coma</strong> <strong>flotante</strong><br />

Sign Expon<strong>en</strong>t Significand Sign Expon<strong>en</strong>t Significand<br />

Small ALU<br />

Expon<strong>en</strong>t<br />

differ<strong>en</strong>ce<br />

0 1 0 1<br />

Control<br />

0 1<br />

Increm<strong>en</strong>t or<br />

decrem<strong>en</strong>t<br />

Shift right<br />

Big ALU<br />

Shift left or right<br />

Rounding hardware<br />

0 1<br />

Sign Expon<strong>en</strong>t Significand<br />

0 1<br />

Compare<br />

expon<strong>en</strong>ts<br />

Shift smaller<br />

number right<br />

Add<br />

Normalize<br />

Round<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

En función del signo<br />

de las mantisas de los<br />

operandos y del tipo de<br />

operación, el circuito de<br />

control seleccionará la<br />

UAL grande para<br />

realizar una suma o<br />

una <strong>resta</strong>.<br />

La UAL pequeña<br />

simplem<strong>en</strong>te <strong>resta</strong> los<br />

expon<strong>en</strong>tes para<br />

calcular la longitud del<br />

desplazami<strong>en</strong>to que<br />

hay que aplicar a la<br />

mantisa del número con<br />

m<strong>en</strong>or módulo.<br />

8


<strong>Suma</strong> y <strong>resta</strong> <strong>en</strong> <strong>coma</strong> <strong>flotante</strong><br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

Al desempaquetar operandos normalizados es preciso incluir el bit implícito<br />

como parte <strong>en</strong>tera de la mantisa, que no estaba almac<strong>en</strong>ado <strong>en</strong> el dato original.<br />

•Como M R ∈ (-4,4), usaremos dos bits para el módulo de la parte <strong>en</strong>tera de las mantisas<br />

fu<strong>en</strong>te (que t<strong>en</strong>drán la forma: s01’...) y para la mantisa resultado.<br />

Dado que el resultado de la operación puede estar desnormalizado, el paso de<br />

postnormalización exige un circuito complejo.<br />

•El increm<strong>en</strong>tador / decrem<strong>en</strong>tador para postnormalizar será un sumador / <strong>resta</strong>dor.<br />

La UAL grande t<strong>en</strong>drá que g<strong>en</strong>erar resultados de al m<strong>en</strong>os 1+2+m+t bits:<br />

•El primer bit sería el de signo.<br />

•Los dos sigui<strong>en</strong>tes serían para la parte <strong>en</strong>tera de la mantisa.<br />

•Los m sigui<strong>en</strong>tes serían para el ancho almac<strong>en</strong>able de la parte <strong>en</strong>tera de la mantisa.<br />

•Los últimos t bits serían para redondear.<br />

La UAL pequeña admitiría operandos de n+1 bits (n: ancho del expon<strong>en</strong>te).<br />

9


3. Producto <strong>en</strong> <strong>coma</strong> <strong>flotante</strong><br />

expa<br />

A = m ⋅2<br />

+<br />

B = m<br />

a<br />

b<br />

⋅2<br />

exp<br />

b<br />

R<br />

= A ⋅B<br />

=<br />

expa<br />

expB<br />

( m ⋅m<br />

) ⋅2<br />

Lo primero es desempaquetar los operandos (dividirlos <strong>en</strong> campos).<br />

a<br />

b<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

Después se pued<strong>en</strong> realizar las dos operaciones sigui<strong>en</strong>tes <strong>en</strong> paralelo:<br />

•<strong>Suma</strong>r los expon<strong>en</strong>tes Exp A y Exp B para obt<strong>en</strong>er Exp R .<br />

•Multiplicar las mantisas M A y M B para obt<strong>en</strong>er M R .<br />

Después se normaliza M R ajustando Exp R si es preciso.<br />

Se comprueba que el expon<strong>en</strong>te resultante está <strong>en</strong> el rango permitido.<br />

•Si ExpR Expmax ± infinito: empaquetar y salir.<br />

•En ambos casos podría g<strong>en</strong>erarse una excepción.<br />

Se redondea la mantisa M R.<br />

•Si M R se desnormaliza, hay que volver al paso de normalización.<br />

•Si M R sigue normalizada, empaquetar el resultado y salir.<br />

10


División <strong>en</strong> <strong>coma</strong> <strong>flotante</strong><br />

expa<br />

A =<br />

ma<br />

⋅2<br />

A ma<br />

expa<br />

−<br />

B = m<br />

b<br />

⋅2<br />

exp<br />

b<br />

Lo primero es desempaquetar los operandos (dividirlos <strong>en</strong> campos).<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

Después se pued<strong>en</strong> realizar las dos operaciones sigui<strong>en</strong>tes <strong>en</strong> paralelo:<br />

•Restar los expon<strong>en</strong>tes Exp A y Exp B para obt<strong>en</strong>er Exp R .<br />

•Dividir las mantisas M A y M B para obt<strong>en</strong>er M R .<br />

Después se normaliza M R ajustando Exp R si es preciso (postnormalización).<br />

Se comprueba que el expon<strong>en</strong>te resultante está <strong>en</strong> el rango permitido.<br />

•Si ExpR Expmax ± infinito: empaquetar y salir (¿producir excepción?).<br />

Se redondea la mantisa M R.<br />

•Si M R se desnormaliza, hay que volver al paso de normalización.<br />

•Si M R sigue normalizada, empaquetar el resultado y salir.<br />

R<br />

=<br />

B<br />

=<br />

m<br />

b<br />

⋅2<br />

exp<br />

B<br />

11


Producto y división <strong>en</strong> <strong>coma</strong> <strong>flotante</strong><br />

En la etapa de inicio hay que<br />

desempaquetar los operandos<br />

originales.<br />

Habitualm<strong>en</strong>te se trabaja con<br />

mantisas normalizadas, para lo<br />

cual es necesario:<br />

•Normalizar los operandos que<br />

estén desnormalizados.<br />

•Contar con un bit más para<br />

ampliar el rango del<br />

expon<strong>en</strong>te.<br />

En la etapa final hay que<br />

empaquetar el resultado,<br />

respetando los anchos<br />

especificados por el estándar y<br />

eliminando la parte <strong>en</strong>tera de la<br />

mantisa.<br />

No<br />

Inicio<br />

<strong>Suma</strong>r/<strong>resta</strong>r los<br />

expon<strong>en</strong>tes<br />

Multiplicar/dividir las<br />

mantisas<br />

Normalizar la mantisa<br />

resultante<br />

¿Expon<strong>en</strong>te mayor<br />

que el máximo?<br />

No<br />

¿Expon<strong>en</strong>te m<strong>en</strong>or<br />

que el mínimo?<br />

No<br />

Redondear la<br />

mantisa resultante<br />

¿Todavía está<br />

normalizada?<br />

Sí<br />

Fin<br />

Sí<br />

Sí<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

Repres<strong>en</strong>tar número <strong>en</strong><br />

forma desnormalizada<br />

Infinito positivo<br />

o negativo<br />

12


Producto y división <strong>en</strong> <strong>coma</strong> <strong>flotante</strong><br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

Las dos operaciones son similares, con lo cual gran parte del circuito para<br />

ambas puede ser común:<br />

•Un sumador / <strong>resta</strong>dor para los expon<strong>en</strong>tes como la UAL pequeña del<br />

circuito de suma / <strong>resta</strong> (sumador para el producto, <strong>resta</strong>dor para la división).<br />

•Un multiplicador <strong>en</strong> <strong>coma</strong> fija que admita operandos fu<strong>en</strong>te de m+1 bits (m:<br />

ancho de la mantisa almac<strong>en</strong>ada).<br />

•Un divisor <strong>en</strong> <strong>coma</strong> fija que admita operandos de m+1 bits.<br />

Si las mantisas están normalizadas se facilita la postnormalización, ya que:<br />

•El módulo de la mantisa producto estará <strong>en</strong> el rango [1,4).<br />

•El módulo de la mantisa coci<strong>en</strong>te estará <strong>en</strong> el rango [1/2,2).<br />

Por tanto, puede ser conv<strong>en</strong>i<strong>en</strong>te normalizar previam<strong>en</strong>te las mantisas fu<strong>en</strong>te<br />

que estén desnormalizadas:<br />

•A la hora de operar, se añadiría un bit a la repres<strong>en</strong>tación interna del<br />

expon<strong>en</strong>te.<br />

13


MIPS<br />

Circuitos para <strong>coma</strong> <strong>flotante</strong><br />

4. Instrucciones <strong>en</strong>samblador para <strong>coma</strong> <strong>flotante</strong><br />

Ti<strong>en</strong>e instrucciones de <strong>coma</strong> <strong>flotante</strong>, ejecutadas por el coprocesador 1 (que se<br />

<strong>en</strong>cu<strong>en</strong>tra d<strong>en</strong>tro del microprocesador).<br />

Los nemotécnicos son similares a las operaciones con <strong>en</strong>teros con signo, pero<br />

con un sufijo indicativo de la precisión de los operandos:<br />

•Precisión simple: .s<br />

•Precisión doble: .d<br />

14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!