Download ppt - IPN

Document related concepts

IEEE coma flotante wikipedia , lookup

Precisión simple en coma flotante wikipedia , lookup

Número subnormal wikipedia , lookup

Coma flotante wikipedia , lookup

Transcript
Arquitecturas de Computadoras
Capitulo 2
Aritmética de Punto Flotante
www.microse.cic.ipn.mx
Aritmética de Punto Flotante

Acertijos de operaciones con punto flotante
 Para cada una de las siguientes expresiones en C:
 Discuta si es verdad para todos los valores de los argumentos
 Explique por qué no es verdad
•
x == (int)(float) x
•
x == (int)(double) x
int x = …;
•
f == (float)(double) f
float f = …;
•
d == (float) d
•
f == -(-f);
•
2/3 == 2/3.0
•
d < 0.0
((d*2) < 0.0)
•
d>f
-f > -d
•
d * d >= 0.0
•
(d+f)-d == f
double d = …;
¡Asuma que ni d o f son NaN!
www.microse.cic.ipn.mx
Cita del día
“95% of the folks out there are completely clueless about
floating-point.”
James Gosling
Sun Fellow
Java Inventor
1998-02-28
www.microse.cic.ipn.mx
Punto Flotante IEEE

Estándar IEEE 754
 Establecido en 1985 como un estándar uniforme para aritmética de
punto flotante
 había diferentes formatos (código incompatible)
 Es soportado por todos los CPU’s grandes

Maneja diferentes aspectos numéricos
 Establece un estándar para realizar redondeo, desbordamiento y
subdesbordamiento
 Es difícil de que a nivel hardware se realice el procesamiento más
rápido
www.microse.cic.ipn.mx
Creador del estándar
de punto flotante
IEEE Standard 754 for Binary Floating-Point Arithmetic.
1989
ACM Turing
Award Winner!
Prof. Kahan
www.cs.berkeley.edu/~wkahan/
…/ieee754status/754story.html
www.microse.cic.ipn.mx
Representación de fracciones
2i
2i–1
4
2
1
•••
å bk ×2
k
k=- j
bi bi–1 • • •
b2 b1 b0 . b–1 b–2 b–3 • • •
1/2
1/4
1/8
b–j
•••
i
2–j
Representación
 Los bits a la derecha del “punto binario” representan fracciones de potencia a la -2
 Se representa el número racional de la sumatoria (arriba)
www.microse.cic.ipn.mx
Ejemplos de fracciones

Valor
5-3/4
2-7/8
63/64
Representación
101.112
10.1112
0.1111112

Observaciones
 Se puede dividir entre 2 con corrimiento a la derecha
 Se puede multiplicar por 2 con corrimiento a l izquierda
 Números de la forma 0.111111…2, es decir menores a 1.0 se pueden
representar como:
 1/2 + 1/4 + 1/8 + … + 1/2i + …  1.0
 Se recomienda utilizar la notación científica 1.0 - 
www.microse.cic.ipn.mx
Números representables

Limitaciones
 Se pueden representar números solo de la forma x/2k
 Algunos números tienen una representación repetida de bits
Valor
Representación
1/3
1/5
1/10
0.0101010101[01]…2
0.001100110011[0011]…2
0.0001100110011[0011]…2
www.microse.cic.ipn.mx
Representación de números


Punto Flotante
Forma numérica
-1s M 2E
 El bit de signo s determina si el número es positivo o negativo
 La fracción o mantisa M representa el valor de una fracción en el
rango [1.0, 2.0)
 El exponente E pondera el valor por uno o por dos.

Codificación
s
exp
 El bit de signo s es el bit más significativo
 El campo exp codifica E
 El campo frac codifica M
www.microse.cic.ipn.mx
frac
Punto flotante
Precisión
Codificación

s
exp
frac
 El bit de signo es el bit más significativo
 El campo exp codifica E
 El campo frac codifica M

Tamaños
 Precisión sencilla: se utilizan 8 bits para exp y 23 bits para frac
 Se tiene un total de 32 bits
 Doble precisión: se utilizan 11 bits para exp y 52 bits para frac
 Se tiene un total de 64 bits
 Precisión extendida: se utilizan 15 bits para exp y 63 bits para frac
 Se tiene un total de 80 bits (sólo lo utilizan CPU’s de Intel y se
desperdicia 1 bit)
www.microse.cic.ipn.mx
Numeros normalizados
Condición
exp  000…0 y exp  111…1
El exponente se codifica como un número polarizado
 E = Exp – Polarización
 Exp: valor sin signo que se denoa por exp
 Polarización: Valor que polariza
• Precisión sencilla: 127 (Exp: 1…254, E: -126…127)
• Doble precisión: 1023 (Exp: 1…2046, E: -1022…1023)
• En general: Polarización = 2e-1, donde e es el número de bits del
exponente.
 Codificación significativa con el valor de 1 implícito
 M = 1.xxx…x2
• Es mínimo cuando 000…0 (M = 1.0)
• Es máximo cuando 111…1 (M = 2.0 - )
• Se tiene un bit más significativo extra que está “libre”
www.microse.cic.ipn.mx
Ejemplos



Codificación normalizada
Valor
 float F = 15213.0;
 1521310 = 111011011011012 = 1.11011011011012 X 213
Significado
M
=
1.11011011011012
 frac
=
110110110110100000000002
Exponente
E
=
13
 Polarización
=
127
 Exp
=
140 =
100011002
Representación de punto flotante:
Hex:
Binario:
4 6 6 D B 4 0 0
0100 0110 0110 1101 1011 0100 0000 0000
Exponente: 140  100 0110 0
15213:
1110 1101 1011 01
www.microse.cic.ipn.mx
Numeros des-normalizados
Condición
 exp = 000…0
Valor
 Valor exponencial E = -Polarización+1
 Valor mantiza
M = 0.xxx…x2
 xxx…x: bits de frac
Casos
 exp = 000…0, fracción = 000…0
 Representa el valor 0
 Hay que notar que puede tener valores distintos +0 y
-0
exp =
000…0, fracc  000…0
 Número muy cercanos a 0.0
 Se pierde precisión al ser un número más pequeño
 “Se llega a un subdesbordamiento”
www.microse.cic.ipn.mx
Numeros especiales
Condición
 Exp = 111…1
Casos
 Exp = 111…1, frac = 000…0
 Representa un valor  (infinito)
 Estas operaciones causan sobreflujo
 Ambos valores pueden ser números positivos y negativos
 E.g. 1.0/0.0 = -1.0/0.0 = +, 1.0/-0.0 = - 
111…1, frac  000…0
 Not-a-Number (NaN)
 Representan casos cuando valores numéricos pueden ser
indeterminados por ejemplo sqrt(-1),  - 
Exp =
www.microse.cic.ipn.mx
Resumen de Codificación

-Normalizado
NaN
Numeros de punto flotante
-Desnorm
0
www.microse.cic.ipn.mx
+Desnorm
+0
+Normalizado
+
NaN
Formato pequeño
de punto flotante

Representación de punto flotante con 8 bits
 El bit de signo es el bit más significativo
 Los siguientes 4 bits son para el exponente, con un valor de
polarización de 7
 Los últimos 3 bits representan la fracción

Es lo mismo que el formato general IEEE
 Normalizado y desnormalizado
 Se representan el 0, NaN e infinito
7 6
s
www.microse.cic.ipn.mx
0
3 2
exp
frac
Valores des-normalizados
relacionados al exponente
7 6
s
Expd
Expb
E
2E
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
-6
-6
-5
-4
-3
-2
-1
0
+1
+2
+3
+4
+5
+6
+7
n/a
1/64
1/64
1/32
1/16
1/8
1/4
1/2
1
2
4
8
16
32
64
128
(inf, NaN)
www.microse.cic.ipn.mx
0
3 2
Exp
Frac
(Des-normalizado, E = 0 y Frac != 0)
(Normalizado, E != 0 y Frac != 0)
(Exp = 1111, Frac != 0)
Rango dinámico
Numeros
De-normalizados
Numeros
Normalizados
W=8 bits
S Exp Frac
E
Valor
0 0000 000
0 0000 001
0 0000 010
…
0 0000 110
0 0000 111
0 0001 000
0 0001 001
…
0 0110 110
0 0110 111
0 0111 000
0 0111 001
0 0111 010
…
0 1110 110
0 1110 111
0 1111 000
-6
-6
-6
0
1/8*1/26 = 1/512
1/4*1/64 = 2/512
-6
-6
-6
-6
6/8*1/64
7/8*1/64
8/8*1/64
9/8*1/64
= 6/512
= 7/512
= 8/512 
= 9/512 
-1
-1
0
0
0
14/8*1/2
15/8*1/2
8/8*1
9/8*1
10/8*1
= 14/16
= 15/16  Por abajo de 1
=1
 Por arriba de 1
= 9/8
= 10/8
7
7
n/a
14/8*128 = 224
15/8*128 = 240
inf
www.microse.cic.ipn.mx


Cercano a cero
El mayor desnorm.
El mas pequeño norm.
El mayor norm.
Distribución de valores ( 6 bits)





-15
Punto flotante de 6 bits, igual que el formato IEEE
e = 3 bits del exponente
f = 2 bits de la fracción
Polarización igual a 3
Hay que notar que la distribución se vuelve más densa conforme se
aproxima al cero
-10
-5
Desnormalizado
www.microse.cic.ipn.mx
0
Normalizado
5
10
Infinito
15
(un acercamiento)
Distribución de valores ( 6 bits)




-1
Punto flotante de 6 bits, igual que el formato IEEE
e = 3 bits del exponente
f = 2 bits de la fracción
Polarización igual a 3
-0.5
0
Desnormalizado
www.microse.cic.ipn.mx
Normalizado
0.5
Infinito
1
Números interesantes
Descripción
Exp(8) Fracc(23)
 Cero
00…00 00…00
 Positivo más Pequeño Desnorm.
00…00 00…01
 Sencillo  1.4 X 10–45
 Doble  4.9 X 10–324
 Más Grande Desnorm.
00…00 11…11
 Sencillo  1.18 X 10–38
 Doble  2.2 X 10–308
 Positivo más Pequeño Norm.
00…01 00…00
 Exactamente el número mayor desnormalizado
 Uno
01…11 00…00
 Más Grande Norm.
11…10 11…11
 Sencillo  3.4 X 1038
 Doble  1.8 X 10308
www.microse.cic.ipn.mx
Valor Numérico
0.0
2– {23,52} X 2– {126,1022}
(1.0 – ) X 2– {126,1022}
1.0 X 2– {126,1022}
1.0
(2.0 – ) X 2{127,1023}
Propiedades especiales

El cero en punto flotante es como en enteros el cero
 Todos los bits = 0

Puede (casi) utilizar una comparación de enteros sin signo
 Se debe primero comparar bits de signo
 Se debe considerar -0 = 0
 Los NaNs son problemáticos
 Será el mayor que otros valores
 ¿A qué podrían llegar estas comparaciones?
 De otra manera O. K.
 Desnormalizado vs. Normalizado
 Normalizado vs. infinito
www.microse.cic.ipn.mx
Redondeo
Cualquier numero x de punto flotante IEEE pueden escribirse de la forma
±(b0. b1b2b3…bp-1)2 X 2E
Con b0=0 y Emax > E > Emin
Decimos que el número real x esta en el intervalo normalizado del sistema de
punto flotante si:
Nmin ≤ x ≤ Nmax
De lo contrario ocurre que
•x está fueradel intervalo normalizado
•La expansión binaria de x requiere de mas de p-bits para especificar
exactamente el número.
•La precisión p de punto flotante es demasiado pequeña para
representar x exactamente.
www.microse.cic.ipn.mx
23
Redondeo
Definimos
x- ≤ x ≤ x+
Sea x en el intervalo normalizado y escrito en la forma normalizada:
x =(b0. b1 b2 b3… bp-1 bp bp+1)2 X 2E
El número mas cercano menor o igual a x es:
x-=(b0. b1 b2 b3… bp-1 )2 X 2E
Mientras que el número mayor a x es:
x+=(b0. b1 b2 b3… bp-1)2 X 2E+(0.000…01)
Puede generar acarreos
Puede necesitar ajuste de exponente
www.microse.cic.ipn.mx
24
Redondeo
Valores correctamente redondeados
Redondeo hacia abajo:
round(x) = x-
Redondeo hacia arriba:
round(x) = x+
Redondeo hacia cero:
round(x) = x- si x ≥ 0 ó x+ si x ≤ 0
Redondeo al justo mas cercano:
www.microse.cic.ipn.mx
25
Operaciones de punto flotante
Vista conceptual
 Primero debe calcular resultados exactos
 Después se debe ajustar a una precisión deseada
 Posiblemente se puede tener sobreflujo si el exponente es muy largo
 Posiblemente redondee para ajustar en la fracción
Ejemplos
de modos de redondeo (se ilustra el redondeo con el símbolo $) –a la
unidad)
•Cero
•Redondeo
hacía abajo (- )
•Redondeo hacía arriba(+ )
•El justo más cercano
(por default)
$1
$1
1.4
$1
$1
$2
$1
1.6
$1
$1
$2
$2
1.5
$1
$2
$3
$2
2.5
$2
-$2
-$2
$3
-1.5
-$1
-$2
Nota:
1.Redondeo hacía abajo: los resultados del redondeo es cercano pero no es mayor que
el verdadero resultado.
2.Redondeo
hacía arriba: el resultado del redondeo es cercano pero no menor que el
verdadero resultado
www.microse.cic.ipn.mx
Detalle al justo más cercano

Es el método de redondeo por default
 Es difícil tener algún otro tipo sin que se utilice ensamblador
 El resto de los métodos son polarizados estáticamente con 60
 La suma de todo el conjunto de números positivos será
consistentemente sobre o bajo estimadas

Aplicando las otras posiciones para decimales/bits
 Cuando se está exactamente a la mitad del camino entre dos
posibles valores
 Se redondeo de manera que el dígito más significativo es justo

E.g., redondear a la centésima más cercana
1.2349999
1.23
(menor que la mitad del camino)
1.2350001
1.24
(mayor que la mitad del camino)
1.2350000
1.24
(mitad del camino-redondeo arriba)
1.2450000
1.25
(mitad del camino-redondeo arriba)
www.microse.cic.ipn.mx
Redondeando números binarios


Números de fracciones binarias
“Justo” cuando el bit menos significativo es 0
 A la mitad del camino cuando los bits de la derecha de la posición de redondeo
= 100…2
Ejemplos
Valor
2 3/32
2 3/16
2 7/8
2 5/8
Binario
10.000112
10.001102
10.111002
10.101002
Redondeo
10.002
10.012
11.002
10.102
El bit menos significativo es 0
www.microse.cic.ipn.mx
Acción
(<1/2-abajo)
(>1/2-arriba)
(1/2-arriba)
(1/2-abajo)
Valor
2
2 1/4
3
2 1/2
Repaso: convertir números
decimales a punto flotante
Ejemplo 1

Caso sencillo: Si el denominador es un exponente 2 (e.g. 2, 4, 8, 16, etc.)
entonces es fácil realizar la conversión:

Represente el valor -0.75 en punto flotante
 -0.75 = -3/4
 -112/1002 = -0.112
 Normalizando -1.12  2-1
 (-1)s  (1 + fracción)  2(127+Exp)
 (-1)s  (1 + .1000000 … 0000)  2(126)
1 0111 1110
www.microse.cic.ipn.mx
100 0000 0000 0000 0000 0000
Ejemplo 2

Representar 1/3 en el formato de punto flotante
 1/3 = 0.33333…10
= 0.25 + 0.0625 + 0.015625 + 0.00390625 + …
= 1/4 + 1/16 + 1/64 + 1/256 + …
= 2-2 + 2-4 + 2-6 + 2-8 + …
= 0.0101010101…2  20
= 1.0101010101…2  2-2
 Signo: 0
 Exponente = -2 + 127 = 125 = 01111101
 Fracción = 0101010101…
0 0111 1101
www.microse.cic.ipn.mx
0101 0101 0101 0101 0101 0101
Otra posibilidad
Ejemplo 2

1/3 = 0.33333…10
0.33333…  2 = 0.66666…  0
0.66666…  2 = 1.33333…  1
0.33333…  2 = 0.66666…  0
0.66666…  2 = 1.33333…  1
0.33333…  2 = 0.66666…  0
0.66666…  2 = 1.33333…  1
…
De manera que 1/310 = 0.010101[01]2
www.microse.cic.ipn.mx
Ejemplo 3

Convertir -2.340625  101 a punto flotante
1. Desnormalizar: -23.40625
2. Convertir la parte entera:
23 = 16 + (7 = 4 + (3 = 2 + (1))) = 101112
3. Convertir la parte de la fracción:
.40625 = .25 + (.15625 = .125 + (.03125)) = .011012
4. Juntar las dos partes y normalizar:
10111.01101 = 1.011101101  24
5. Convertir el exponente: 127 + 4 = 100000112
1 1000 0011
www.microse.cic.ipn.mx
0011 1011 0100 0000 0000 0000
Ejemplo 3
a. 23/2 = 11.5
11/2 = 5.5
5/2 = 2.5
2/2 = 1
1/2 = 0.5
1
1
1
0
1
De manera que 2310 = 101112
b. 0.406252 = 0.8125
0.81252 = 1.625
0.6252 = 1.25
0.252 = 0.5
0.52 = 1.0
0
1
1
0
1
De manera que 0.4062510 = 0.011012
www.microse.cic.ipn.mx
Punto flotante a decimal

Cuál es el equivalente decimal de:
1 1000 0001
s exponente
111 0000 0000 0000 0000 0000
fracción
(-1)s  (1 + fracción)  2(Exponente-127)
(-1)1  (1 + .111)  2(129-127)
= -1  (1.111)  2(2)
= -111.12
= -7.510
www.microse.cic.ipn.mx
Suma en punto flotante

Operandos
 (-1)s1 M1 2E1

(-1)s2
M2
E1–E2
2E2
(–1)s1 M1
 Hay que asumir que E1 > E2

(–1)s2 M2
+
Resultado exacto
(-1)s M 2E
(–1)s M
 Signo s, mantisa M:
 Resultado de signo alineado y sumar
 Exponente E:

E1
Fijar
 Si M  2, recorrer M a la derecha, incrementar E
 Si M < 1, recorrer M a la izquierda k posiciones, decrementar E
por k
 Sobreflujo si E está fuera de rango
 Redondear M para definir la precisión de frac
www.microse.cic.ipn.mx
Algoritmo de la suma
Numeros de punto flotante
1. Compara los exponentes de los dos números. Realizar un corrimiento a la derecha del
número más pequeño hasta que su exponente se empate con el exponente del
número más grande;
2. Sumar las mantisas;
3. Normalizar la suma, ya sea que se realice corrimiento hacía la derecha y se incremente
el exponente, o se realice corrimiento a la izquierda y se decrementa el exponente;
if (ocurrió desbordamiento) {
break arrojar una excepción; }
else {
4. Redondear la mantisa a un número apropiado de bits;
}
if (ya se encuentra normalizada la suma) {
stop algoritmo; }
else {
goto paso 3;
}
www.microse.cic.ipn.mx
Algoritmo de la suma
punto flotante
Sumar 0.510 más -0.437510 en binario utilizando el algoritmo de la suma
en punto flotante.
Primero hay que convertir los números a binario en una notación
científica normalizada, asumiendo que se mantiene una precisión de 4
bits.
0.510 = 1/210 = 1/2110 = 1.00010  2-1
= 0.12 = 0.12  20 = 1.0002  2-1
-0.437510 = -7/1610 = -7/2410
= -0.01112 = -0.01112  20 = -1.1102  2-2
Ahora continuamos con el algoritmo.
www.microse.cic.ipn.mx
Algoritmo de la suma
punto flotante

Paso 1. La mantisa del número con el menor de los exponentes, i.e. 1.1102  2-2 se recorre a la derecha hasta que el exponente se empate con
el número más grande:
-1.1102  2-2 = -0.1112  2-1

Paso 2. Se suman las mantisas de los dos números
1.0002  2-1 + (-0.1112  2-1) = 0.0012  2-1
Puede utilizarse complemento a 2 para mejor visualización!!!
www.microse.cic.ipn.mx
Algoritmo de la suma

Punto Flotante
Paso 3. Se normaliza la suma, verificando si hay desbordamiento o
subdesbordamiento:
0.0012  2-1 = 0.0102  2-2 = 0.1002  2-3 = 1.0002  2-4
Debido a que 127  -4  -126, no existe ni desbordamiento ni
subdesbordamiento. (El exponente polarizado podría ser -4 + 127 o 123,
que es un valor que se encuentra entre 1 y 254, que son los exponentes
polarizados más pequeño y más grande)
www.microse.cic.ipn.mx
Algoritmo de la suma

Punto Flotante
Paso 4. Redondear de la suma:
1.0002  2-4
La suma ya se encuentra representada por 4 bits, de manera que no hay
necesidad de cambiar los bits debido al redondeo
La suma es entonces:
1.0002  2-4 = 0.00010002 = 0.00012
= 1/2410 = 1/1610 = 0.062510
Que es el resultado que esperábamos de
0.510 + (-0.437510)= 0.062510
www.microse.cic.ipn.mx
Propiedades de la suma


Comparar con los de un grupo Abeliano
 ¿Es cerrado bajo la suma?
 Pero puede crear infinitos o NaN
 ¿Es conmutativo?
 ¿Es asociativo?
 Debido al sobreflujo y al redondeo
 ¿Es 0 la identidad aditiva?
 ¿Cada elemento tiene su inverso aditivo?
 Excepto para infinito y NaN
Monotonicidad
 ¿Es a  b  a + c  b + c?
 Excepto para infinito y NaNs
Punto Flotante
Si
Si
No
Si
Casi
Casi
Los grupos abelianos son así llamados en honor al matemático noruego Niels Henrik Abel.
Los grupos que no son conmutativos se denominan no abelianos (también no conmutativos,
con menos frecuencia).
www.microse.cic.ipn.mx
Algoritmo de la suma
www.microse.cic.ipn.mx
Sumador de Punto Flotante
Multiplicación

Punto Flotante
Operandos
(-1)s1 M1 2E1  (-1)s2 M2 2E2

Resultado exacto
 (-1)s M 2E

 Signo s: s1^s2
 Fracción o mantisa M: M1  M2
 Exponente E: E1 + E2
Ajuste
 Si M  2, se recorre M a la derecha, sobreflujo
 Si E está fuera de rango hay sobreflujo
 Se redondea M para ajustar la precisión de la fracción

Implementación
 La multiplicación de significantes ocupa la mayor área
www.microse.cic.ipn.mx
Algoritmo de la multiplicación
Punto Flotante
1. Sumar los exponentes polarizados de los dos números, restar la polarización
de la suma para obtener el nuevo exponente polarizado;
2. Multiplicar las mantisas;
3. Normalizar el producto obtenido si es necesario, haciendo un corrimiento a la
derecha e incrementando el exponente;
if (ocurrió desbordamiento) {
break arrojar una excepción; }
else {
4. Redondear la mantisa a un número apropiado de bits; }
if (ya se encuentra normalizado el producto) {
5. if (signo de los operandos son iguales) {
signo del producto es positivo; }
else {
signo del producto es negativo;
stop algoritmo; }
else {
goto paso 3; }
www.microse.cic.ipn.mx
Ejemplo de multiplicación (1/4)
Multiplicar los números 0.510 por -0.437510
0.510 = 1/210 = 1/2110 = 1.00010  2-1
= 0.12 = 0.12  20 = 1.0002  2-1
-0.437510 = -7/1610 = -7/2410
= -0.01112 = -0.01112  20 = -1.1102  2-2

Paso 1. Sumar los exponentes sin polarización:
-1 + (-2) = -3
o, utilizando la representación polarizada:
(-1 + 127) + (-2 + 127) – 127
= (-1 - 2) + (127 + 127 – 127)
= -3 + 127 = 124
www.microse.cic.ipn.mx
Punto Flotante
Ejemplo de multiplicación (2/4)

Punto Flotante
Paso 2. Multiplicar las mantisas:
1.0002

1.1102
0000
1000
+ 1000
1000
11100002
El producto es 1.1100002  2-3, pero se necesita mantener
los 4 bits, de manera que el resultado es 1.1102  2-3
www.microse.cic.ipn.mx
Ejemplo de multiplicación (3/4)
Punto Flotante
Paso 3.
Ahora se verifica que el producto este normalizado, y entonces
se verifica si el exponente estará con desbordamiento o
subdesbordamiento.
Para este ejemplo el producto ya está normalizado y, debido a
que 127  -3  -126, no existe desbordamiento o
subdesbordamiento.
 Paso 4.
Al momento de redonder el producto no existen cambios:
1.1102  2-3

www.microse.cic.ipn.mx
Ejemplo de multiplicación (4/4)
Punto Flotante
Paso 5.
Debido a que loe signos de los operandos son diferentes, el
signo del producto es negativo. Así, el producto es:
-1.1102  2-3
Se convierte ahora el resultado a decimal:
-1.1102  2-3 = -0.0011102 = 0.001112
= -7/2510 = -7/3210 = -0.2187510

De manera que 0.510  -0.437510 = -0.2187510
www.microse.cic.ipn.mx
Propiedades de multiplicación

Punto Flotante
Comparación con anillo conmutativo
 ¿Es cerrado bajo la multiplicación?
Si
 Pero puede generar inifinito o NaN
 ¿Es la multiplicación conmutativa?
 ¿Es la multiplicación asociativo?
Si
No
 Posiblemente se puede generar sobreflujo, y es inexacto ante el
redondeo
 ¿Es 1 la identidad multiplicativa?
Si
 ¿Es la multiplicación distributiva
sobre la adición?

No
 Posiblemente se puede generar sobreflujo, y es inexacto ante el
redondeo
Monotonicidad
 ¿Es a  b & c  0  a  c  b  c?
 Excepto para infinito y NaN
www.microse.cic.ipn.mx
Punto Flotante
Lenguage C

C garantiza dos niveles
 float
 double

precisión simple
doble precisión
Conversiones
 Los cambios entre int, float y double cambia los valores numéricos
 Double o float a int
 Trunca la parte de la fracción
 Igual que el redondeo hacia cero
 No está definido cuando está fuera de rango
 Generalmente satura a TMin o Tmax
 int a double
 Conversión exacta, mientras que int tenga un tamaño de palabra
menor o igual a 53 bits
 int a float
 Se redondea de acuerdo al modo de redondeo
www.microse.cic.ipn.mx
Solución al acertijo
Punto Flotante
Hay que asumir que d o f es NaN
• x == (int)(float) x
No: 24 bit de mantisa
• x == (int)(double) x
Si: 53 bit mantisa
• f == (float)(double) f
Si: se incrementa precisión
• d == (float) d
No: se pierde precisión
• f == -(-f);
Si: Sólo cambia el bit de signo
• 2/3 == 2/3.0
No: 2/3 == 0
• d < 0.0
((d*2) < 0.0)
¡Si!
• d>f
-f > -d
¡Si!
• d * d >= 0.0
¡Si!
• (d+f)-d == f
No: No es asociativa
int x = …;
float f = …;
double d = …;
www.microse.cic.ipn.mx
Ariane 5 4 de junio de 1996



Explotó a los 37 segundos después de
despegar
Se perdieron $500 millones DLS
¿Por qué?
 Se calculó la velocidad horizontal




como número de punto flotante de
64 bits.
Este fue convertido a un entero de 16
bits.
EL numero fue mayor que 32,767
Funcionó muy bien para el Ariane 4
Hubo un sobreflujo para el Ariane 5
 Se utilizó el mismo software, pero
diferente procesador
www.microse.cic.ipn.mx
Punto Flotante
Resumen

Punto Flotante
El formato IEEE de punto flotante tiene propiedades
matemáticas claras
 Representa números de la forma M  2E
 Se puede razonar acerca de operaciones independientes
de la implementación
 Como si se calculara con precisión perfecta y entonces
se redondea
 No es lo mismo que la aritmética real
 Se viola la asociatividad y la distributividad
 Hace la vida difícil a los compiladores y las aplicaciones
de programadores serios
www.microse.cic.ipn.mx