Representación de números Representación de punto flotante Programación Orientada a Objeto Ing. Civil en Telecomunicaciones • Computador no puede representar exactamente un número de punto flotante (float) 1/3.0 = 0.3333333432567 Limitado por representación usando número fijo de bits Pérdida de precisión Pérdida de exactitud Aritmética de punto flotante Números de precisión simple • Actualmente, en forma generalizada, se usa el formato IEEE-754 • Precisión simple (float) utiliza 32 bits Este formato codifica números de punto flotante de la forma (-1)s·1.m·2e s corresponde al signo m corresponde a la mantisa e corresponde al exponente Exponente e puede ser positivo o negativo Mantisa m toma valores 0 ≤ f < 1 1 bit de signo s, 23 de mantisa m y 8 de exponente e • Exponente e va de -126 a +127 Codificado como e + 127 • Mantisa m va de 00….000 a 11….111 Parte fraccionaria f es 1 + m (“1 implícito”) • Estos son los valores normalizados No representan Ejemplo de precisión simple • Convertir entero 12345 a precisión simple 1234510 es 110000001110012 1.10000001110012x213 Eliminando el 1 y completando a 23 bits, se tiene m = 10000001110010000000000 Exponente e = 127+13 = 140 = 100011002 El signo s es 0 (número positivo) El resultado completo es 0x4640E400, o 0100 0110 0100 0000 1110 0100 0000 00002 Forma normalizada: © 2015 Mario Medina C. el 0! Conversión de precisión simple • Convertir 0x40490FDB a su equivalente decimal en punto flotante 010000000100100100001111110010112 Signo 0 implica número positivo Exponente 128 implica e es 1 Mantisa m es 100100100001111110010112 Con el 1 implícito es 1.100100100001111110010112, que es 1. 570796410 Número es entonces 1.5707x21=3.141592710 1 Representación del 0 • Cero positivo Bit de signo s es 0, bits del exponente e son 0s y mantisa m es 0 0000 000 0000 0000 0000 0000 0000 00002 • Cero negativo (número válido!) -0.0: bit de signo s es 1, bits del exponente e son 0s y mantisa m es 0 1000 000 0000 0000 0000 0000 0000 00002 Infinito • Bits del exponente e son sólo 1s y la mantisa m vale 0 • Infinito positivo (+∞): 0111 1111 1000 0000 0000 0000 0000 00002 • Infinito negativo (-∞): 1111 1111 1000 0000 0000 0000 0000 00002 • Operaciones aritméticas propagan el valor infinito Infinito*-3 da por resultado -Infinito NaN • Not A Number (NaN) • Bits del exponente e son sólo 1s • Si mantisa m es diferente de 0, número es NaN Ejemplo: Raíz de -1 NaN: 0111 1111 1000 0000 0000 0000 0000 00012 • Operaciones aritméticas también propagan valor NaN Números normalizados • Número positivo más pequeño representable en un float normalizado es 1x2-126 Bit s es 0, exponente e es 1 y mantisa m es 0 0000 0000 1000 0000 0000 0000 0000 00002 • Número positivo más grande representable en un float normalizado es x(2-2-23)*2127 Equivalente a 2128 - 2104 Bit s es 0, e es 254 y mantisa m es sólo 1s 0111 111 0111 1111 1111 1111 1111 11112 Números denormalizados • Números denormalizados permiten representar números más pequeños aún, más cercanos al 0 Bits del exponente e toman valor 0 Exponente es -126 Valor fraccionario f es m sin el 1 implícito 0000 0000 0000 0000 0000 0000 0000 00012 2-23x2-126 0000 0000 0111 1111 1111 1111 1111 11112 (1 - 2-23)x2-126 © 2015 Mario Medina C. Ejemplos precisión simple Descripción Exponente Mantisa Valor Cero Denormalizado mínimo 00…00 00…00 0….00 0….01 Denormalizado Máximo Normal mínimo 00…00 1….11 00…01 0….00 Uno Normal máximo 01…11 11…10 0….00 1….11 0 2-23x2-126 Valor decimal 0.0 1.4x10-45 (1-2-23) x2-126 1.2x10-38 1x2-126 1.2x10-38 1x20 1.0 (2-2-23)x2127 3.4x1038 2 Números de precisión doble Ejemplos precisión doble • Estándar IEEE-754 para doble precisión es muy similar a precisión simple Pero con más bits • Precisión doble (double) utiliza 64 bits 1 bit de signo s, 52 de mantisa m y 11 de exponente e • Exponente e va entre -1022 y +1023 Descripción Exponente Mantisa Valor Cero 00…00 0….00 0 Denormalizado mínimo 00…00 0….01 2-52x2-1022 Denormalizado máximo 00…00 1….11 Normal mínimo 00…01 0….00 1x2-1022 Uno 0….00 1x20 1….11 (2-2-52)x21023 01…11 Valor decimal 0.0 4.9x10-324 (1-2-52) x2-1022 2.2x10-308 2.2x10-308 1.0 Codificado como e + 1023 Normal máximo 11…10 Punto flotante en Intel x86 Ejercicios de punto flotante • Procesadores Intel x86 tiene registros especiales de 80 bits para punto flotante 1 bit de signo, 63 de mantisa y 15 de exponente Incluye además 1 bit para el 1 implícito Todas las operaciones de punto flotante entre registros se realizan en 80 bits Resultados se truncan y/o redondean a 64 o 32 bits Estándar C tiene tipo de dato long 1.8x10308 double • Indique si estas aseveraciones son V ó F Suponga int x; float f; double d; x == (int) (float) x; x == (int) (double) x; 3. f == (float) (double) f; 4. d == (float) d; 5. f == -(-f); 6. 2/3 == 2/3.0; 7. d < 0.0 implica (d*2) < 0.0 8. d > f implica –f > -d 9. d*d >= 0.0 10. (d + f) – d == f 1. 2. para forzar este comportamiento © 2015 Mario Medina C. 3