Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Aritmetica en Coma Flotante
Aritmetica en Coma Flotante
Curso 2010-2011
El hardware de punto flotante se populariz al comenzar a ser de utilidad hacia 1957 en el que
una unidad decimal de punto flotante estuvo disponible en el IBM 650, y pronto las series IBM 704,
709, 7090, 7094, etc ..., ofrecieron hardware binario de punto flotante para simple y doble precisin.
Como consecuencia se dispona ya de punto flotante en gran parte de computadores, pero cada
implementacin era diferente.
Sobre 1976 John F. Palmer en Intel comienza el desarrollo de una aritmtica de punto flotante
para toda la lnea de productos de Intel. La aparicin del 8086 era inminente, y se estaba
contemplando la opcin de incorporar un coprocesador de punto flotante, el 8087, para el 8086. El
coprocesador era un chip adicional que aceleraba una parte del trabajo del procesador, en este caso
los clculos en punto flotante. En aquellos tiempos las aritmticas de punto flotante eran ligeramente
diferentes entre los grandes computadores pero una verdadera anarqua entre los microcomputadores,
Vicente Arnau Llombart
12/11/2010
Curso 2010-2011
en los que era necesario albergar una docena de aritmticas diversas en el firmware de la ROM o va
software. Robert G. Stewart, un ingeniero de la IEEE trat de controlar esta anarqua reinante y
propuso que el IEEE disease un estndar aceptable de punto flotante.
Las reuniones de este comit en referencia al punto flotante comenzaron a finales de 1977 con
multitud de borradores que provenan de innumerables fuentes y se alargaron hasta 1985 cuando se
hizo oficial el Standard 754 del IEEE para punto flotante binario, basado en el diseo inicial de
Intel, pero algo simplificado.
En 1980 Intel harta de esperar lanza el 8087 para su uso en el Ibm Pc, paralelamente Motorola
anuncia en 1982 su 68881, utilizado en el Sun 3 y el Macintosh II, al mismo tiempo de estos
lanzamientos el estndar finalmente apareci.
Representacin en Coma Flotante.
Con esta notacin exponencial seremos capaces representar un amplio rango de valores numricos
positivos y negativos centrados en el cero.
Un nmero cualquiera X expresado en notacin exponencial se puede escribir como:
X = M * BE
y si lo queremos representar en un registro de n bits, utilizaremos p bits para la mantisa M y q bits
para el exponente E, adems del un bit de signo s de la mantisa (del nmero en si). Siendo B la base
del exponente y cumplindose que :
n = p+q+1
La base B est implcita y no es necesario representarla, pues es la misma siempre.
El nombre de coma flotante proviene de que al ajustar el exponente E se modifica la posicin
del punto decimal en la mantisa M.
El diseador de la aritmtica debe conseguir un compromiso entre los tamaos de la mantisa y
los tamaos del exponente, ya que al tener un nmero fijo de bits totales, si se toma un bit de un
campo se pierde del otro y viceversa. Este compromiso se mueve entre la precisin y el rango que
deseemos del nmero en punto flotante, es decir incrementar el tamao de la mantisa enriquece el
nmero de de bits para representar la mantisa, mientras que incrementar el tamao del exponente
incrementa el rango de nmeros que pueden representarse.
Ejemplo: Sean los siguientes nmeros:
97600000000000000 = 9,76 * 10+16 = 0,976 * 10+17
0.000000000000976 = 9,76 * 10-16 = 0,976 * 10-15
para pasarlos a notacin exponencial lo que hemos hecho es mover el
punto decimal y utilizar el exponente para registrar la posicin
original de dicho punto.
12/11/2010
Curso 2010-2011
La mantisa M suele ser una representacin en complemento a 2 (con signo). La precisin de las
representaciones numricas va a depender del nmero de bits que utilicemos para la mantisa. Por ello
es fundamental que la mantisa tenga el mayor nmero de bits significativos, para lo cual se debe
normalizar. La normalizacin de la mantisa en base 2 se consigue desplazando hacia la izquierda la
mantisa hasta que el bit a la derecha del punto de la raz sea uno (o el de la izquierda). Por ello, al
colocar el primer uno a la derecha del punto decimal, tendremos que la magnitud de la mantisa en
valor absoluto tiene un valor dentro del rango:
|m|
110.101
0.110101 * 211 =
1.10101 * 210
Exponente.
Es un nmero de p bits que utiliza una representacin exceso 2p-1 por las razones que vamos a
exponer.
a) El 0 se podra representar como M=0 y cualquier valor de exponente. Pero puede ocurrir
que al realizar operaciones aritmticas, a causa de los errores de redondeo, apareciera algn 1
en posiciones menos significativas de la mantisa.
Esto sugiere que el exponente ms adecuado para representar el 0 es aquel que tiene el mayor
valor negativo.
De esta forma, se logra que los errores de redondeo de la mantisa, den un nmero tan prximo
a cero como sea posible.
b) La representacin del 0 es una secuencia de 0`s tanto en la mantisa como en el exponente,
de esta forma tenemos una nica representacin del cero.
12/11/2010
Curso 2010-2011
x = mx 2xe
y = my 2ye
las operaciones de suma y resta se definen de la siguiente forma, suponiendo que xe < ye:
x+y =
xy =
x-y ==>
2560
+ 516000
518560
que seria
5,1856 105
5,13440 105
x+y =
x-y ==>
x-y =
12/11/2010
Curso 2010-2011
y-x =
Ejemplo:
Sean x e y los siguientes nmeros en base-2
x = 11000
y = 1010000
Los pasamos a notacin exponencial y realizamos las operaciones:
X+Y: X = 1,1 * 2100
X+Y
=
=
=
=
x+y
y x-y.
= 1,01 * 2110
0,011
+ 1,01
1,101
X-Y:
12/11/2010
Curso 2010-2011
Problema:
Sean x e y los siguientes nmeros en base-2
x = 1110101
y = 11101
Pasarlos a notacin exponencial y realiza las operaciones: x+y, y-x y x-y.
Importante en este caso: expresa el resultado de forma normalizada.
12/11/2010
Curso 2010-2011
con mayor densidad de nmeros, al acercarnos al cero. Y perdemos precisin al alejarnos hacia ms
o menos infinito.
Algoritmo de la suma-resta.
Por lo visto con anterioridad, para realizar la suma (resta) de dos operandos en representacin coma
flotante debemos realizar previamente la separacin de los exponentes y de las mantisas para su
tratamiento posterior, y despus realizar esta serie de pasos:
1. Seleccionar el nmero con menor exponente y desplazar su mantisa a la derecha tantas veces
como indique la diferencia en mdulo de los exponentes.
2. Hacer que el exponente resultado sea igual al mayor de los exponentes.
3. Realizacin de las operaciones de suma o resta con las mantisas.
4. Normalizacin del resultado. Una vez realizada la suma se debe normalizar desplazando los
bits de la mantisa hacia la izquierda o la derecha con lo cual habr que cambiar el valor del
exponente.
5. Comprobar las condiciones de rebose.
Un diagrama de flujo del algoritmo se muestra en la figura de la pgina siguiente. Se utilizan los
mismos registros que para el caso de la suma resta, y el resultado final que almacenado en los
registros A y E.
12/11/2010
Curso 2010-2011
12/11/2010
Curso 2010-2011
Multiplicacin y divisin.
La multiplicacin y la divisin en punto flotante son ms sencillas de realizar. Vemos la formula que
nos permitir realizar estas operaciones manualmente:
Ejemplo:
x*y
(mx * my ) 2xe+ye
(mx
X = 256
my ) 2xe-ye
Y = 51600
Ejemplo: Dados
X= 11000
Y=1010000
12/11/2010
Curso 2010-2011
12/11/2010
Curso 2010-2011
Al estar el dato normalizado, es decir expresado siempre como 1, (uno coma algo ms), el 1
de la parte entera no se almacena, aunque nunca debemos olvidarnos que existe.
El signo de la mantisa est representado en el bit 31.
El campo del exponente (ne) dispone de 8 bits, empezando por el bit 23 hasta el bit 30.
El campo de mantisa (nm) dispone de 23 bits, empezando por el bit 0 hasta el bit 22.
Considerando el valor 1 implcito (oculto) para el primer bit de los nmeros binarios
normalizados la precisin del campo de la mantisa es de 24 bits.
El valor del desplazamiento es de 127, es decir el exceso C = 2 7-1 = 127.
Vicente Arnau Llombart
12/11/2010
Curso 2010-2011
Estos tamaos de exponente y mantisa dan a la aritmtica del computador un rango que cubre
fracciones tan pequeas como 2.0 diez x 10 -38 y nmeros tan grandes como 2.0 diez x 10 38.
El valor V representado por esta cadena puede ser determinado como sigue:
Si E=255 y M es no nulo, entonces V=NaN ("Not a number")
Si E=255 y M es cero y S es 1, entonces V=-Infinito
Si E=255 y M es cero y S es 0, entonces V=Infinito
Si 0<E<255 entonces V=(-1)**S * 2 ** (E-127) * (1.M)
donde "1.M" se emplea para representar el nmero binario creado
por la anteposicin a M de un 1 y un punto binario.
Si E=0 y M es no nulo, entonces V=(-1)**S * 2 ** (-126) * (0.M)
Estos son valores "sin normalizar".
Si E=0 y M es cero y S es 1, entonces V=-0
Si E=0 y M es cero y S es 0, entonces V=0
En particular,
0 00000000 00000000000000000000000 = 0
1 00000000 00000000000000000000000 = -0
0 11111111 00000000000000000000000 = Infinito
1 11111111 00000000000000000000000 = -Infinito
0 11111111 00000100000000000000000 = NaN
1 11111111 00100010001001010101010 = NaN
0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5
0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127)
0 00000000 00000000000000000000001 = +1 * 2**(-126) *
0.00000000000000000000001 =
2**(-149) (valor positivo ms pequeo)
Doble precisin
El estndar IEEE-754 para la representacin en doble precisin de nmeros en coma flotante exige una cadena
de 64 bits. El primer bit es el bit de signo (S), los siguientes 11 son los bits del exponente (E) y los restantes
52 son la mantisa (M):
12/11/2010
Curso 2010-2011
El campo de mantisa (nm) dispone de 52 bits, empezando por el bit 0 hasta el bit 51.
Considerando el valor 1 implcito (oculto) para el primer bit de los nmeros binarios
normalizados la precisin del campo de la mantisa es de 53 bits.
El valor del desplazamiento es de 1023,es decir el exceso C = 2 10- 1 = 1023.
Estos tamaos de exponente y mantisa dan a la aritmtica del computador un rango que cubre
fracciones tan pequeas como 2.0 diez x 10 -308 y nmeros tan grandes como 2.0 diez x 10 308.
El valor V representado por esta cadena puede ser determinado como sigue:
Si E=2047 y M es no nulo, entonces V=NaN ("Not a number")
Si E=2047 y M es cero y S es 1, entonces V=-Infinito
Si E=2047 y M es cero y S es 0, entonces V=Infinito
Si 0<E<2047 entonces V=(-1)**S * 2 ** (E-1023) * (1.M)
donde "1.M" se emplea para representar el nmero binario creado
por la anteposicin a M de un 1 y un punto binario.
Si E=0 y M es no nulo, entonces V=(-1)**S * 2 ** (-1022) * (0.M)
Estos son valores "sin normalizar".
Si E=0 y M es cero y S es 1, entonces V=-0
Si E=0 y M es cero y S es 0, entonces V=0
Precisin Extendida
12/11/2010
Curso 2010-2011
12/11/2010
Curso 2010-2011
100 1001 0
4
12/11/2010
Curso 2010-2011
Redondeo.
Cuando tenemos un valor no representable, se aproxima a uno de estos 4 casos:
-
Redondeo hacia +
Redondeo hacia -
Redondeo hacia 0.
Bit de guarda.
Cualquier operacin aritmtica se realiza sobre formatos ampliados. De esta forma ganamos
precisin en la realizacin de las operaciones aritmticas.
Veamos un ejemplo de la importancia de utilizar representaciones ampliadas, o bits de guarda:
X:
1,00 . . . 00 * 21
Y: - 0,11 . . . 11 * 21
0,00 . . . 01 * 21
X:
1,00 . . . 00 0000 * 21
Y: - 0,11 . . . 11 1000 * 21
0,00 . . . 00 1000 * 21
12/11/2010
Curso 2010-2011
100 0001 1
Ox
exp = 10000011
En doble precisin:
17.25 = 10001.01 = 1.000101 * 2100
00000000100
+ 01111111111
10000000011
exp =
(17.25)DP =
(17.25)DP
Ox
. . .
0000
0 0 0 0 0 0 0 0 0 0 0
A= (-255)10
segn el IEEE-
X=0x418A0000 + Y=0xCA4F0000
12/11/2010
Curso 2010-2011
10000011
10000000000
...
00
10000101
010000000000
...
00
Inicio Registros:
E1 = 00000100
E2 = 00000110
A = 1.1
M = 1.01
Paso 1:
si
(-2)C2
>>A= 0.11
E = E + 1 = -10 + 1 = -1
E = 11111110+(1) = 11111110 + 00000001 = 11111111
E<0
si
>>A= 0.011
E = E + 1 = -1 + 1 = 0
E = 11111111+(1) = 11111111 + 00000001 = 00000000
E<0
no
Paso 2:
E>0
no
Paso 3:
A=A+M
A :
A Rebose?
NO
NO
A = 0 ?
A Normalizado ???
0.011
+ 1.01
1.101
SI
FIN :
X+Y =
10000101
1010000000 . . .
00
X+Y = 0x42D00000
12/11/2010
Curso 2010-2011
10000011
100000000000
...
00
10000101
010000000000
...
00
Inicio Registros:
Paso 1:
A = 1.1
M = 1.01
Paso 2:
A = A * M
1.1
* 1.01
11
00
11
1.111
E Rebose ?
NO
A = 0 ?
NO
A Normalizado ?
SI
FIN :
X*Y =
10001001
1110000000
...
00
X * Y = 0x44F00000
Comprobacin:
1920 =
10001001
1110000000
...
00
12/11/2010
Curso 2010-2011
10000011
100000000000
...
00
10000101
010000000000
...
00
Inicio Registros:
A = 1.01
M = 1.1
Paso 1:
(todo en C2)
A=A/M
1.01
1.1
10 0
0.1101010101...
1 00
...
E Rebose ?
NO
A=0?
NO
A Normalizado ? NO :
A = 1.10101010101010...
E = E 1 = 10000000
FIN :
Y/X=
10000000
10101010101010101010101
Y/X = 0x40555555
12/11/2010
Curso 2010-2011
0x3F300000
Solucin: en SP es
C0F80000
P7) Representar el nmero X = -56.320 en formato S.P. y D.P. segn la norma IEEE-754.
Resultado en S. P. : 0xC26147AE
Resultado en D. P. : 0xC04C28F5C28F5C29
X/Y.
12/11/2010