Download ppt - IPN
Document related concepts
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.406252 = 0.8125 0.81252 = 1.625 0.6252 = 1.25 0.252 = 0.5 0.52 = 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