Representación de Números Reales María Elena Buemi 15 abril de 2011 Introducción a la Computación
Representación de Números Reales Cómo se representa un número real? Un numeral con parte entera y parte fraccionaria Dos maneras de representarlos: con Punto Fijo y con Punto Flotante. Punto Fijo: se asigna una cantidad fija de dígitos para la parte entera y una cantidad fija para la parte fraccionaria. Problemas! no premite representar números muy grandes o muy pequeños, al no ser flexible, cuando se hacen algunas operaciones donde hay acarreo se pierde precisión.
Representación Punto Fijo, pasar 32, 75 a base 2, con 16 dígitos, 8 para parte entera y 8 para parte fraccionaria Pasar parte entera binario 32 10 = 100000 2 = 1 2 5 +0 2 4 +0 2 3 +0 2 2 +0 2 1 +0 2 0 Pasar fracción decimal a binario 0.75 10 = 0.11 2 Dado que : 0.75 2 = 1.25 0.50 2 = 1.00 0.0 2 = 0.0 parte entera parte fraccionaria 00100000.11000000
Notación Científica ± d X Base Exponente d, un sólo dígito distinto de 0, tal que d Base Base: 2, 10,16,... Exponente u Orden de magnitud
Representación en Punto Flotante Donde: Mantisa {}}{} ± d.d... d Base {{ Exponente } Formato Mantisa B Precisión Base y ± ( d 0 B 0 + d 1 B 1 +... + d p 1 B (p 1)) B Exponente, 0 d i < B
Distintas formas de representar 32, 75 con 16 dígitos binarios Punto fijo: 00100000.11000000 Notación Científica 1.000001100000000x10 5 Notación Punto flotante de 32 binarios 1.0000011000000000000000000000000x10 5
Formato Punto Flotante de 32 bits Sea una tira de 32 bits distribuidos de modo que: 1 bit signo, 8 bits para el exponente(exceso 127), 23 bits mantisa exponente min = 126, exponente max = 127, normalizado 1.
Exceso 127 8 bits Exceso 127 00000000 127 00000001 126 00000010 125...... 01111110 1 01111111 0 10000000 1 10000001 2 10000010 3...... 11111101 126 11111110 127 11111111 128
Aritmética de punto flotante Suponemos operaciones suma y resta entre dos operandos. Asegurar que ambos tienen el mismo exponente. Problemas Exponente Overflow: Si el exponente excede el máximo > + o Exponente Underflow: Si exponente es más pequeño que el minimo devuelve 0. Mantisa Underflow: el caso cuando agrego bits para alinear, operar y el resultado es muy pequeño, excede los bits del formato, entonces se aplica un forma de redondeo. Mantisa Overflow: puede ocurrir cuando se operen con 2 del mismo signo.
IEEE Institute of Electrical and Electronics Engineers
Standard IEEE 754 Permite intercambios entre distintas arquitecturas
Standard IEEE 754 Formato Parámetro Simple Doble Simple Doble Extendido Extendido signo + mantisa 24 53 32 64 e max +127 +1023 1023 >16383 e min -126-1022 -1022-16382 Bits Exponente(exceso) 8 11 11 15 Cant. bits 32 64 43 79
Observaciones sobre el exponente, caso simple precisión e max = 127 y e min = 126. Motivo para tener e min < e max es para que el recíproco del número más pequeño no desborde, (overflow). e min 1 se utiliza para representar 0 e max + 1 para cantidades especiales e max = 127 y e min = 126, aunque en la representación de exponentes el mínimo (el 0 en notacion sin signo )corresponde al 127 y el máximo a 128(corresponde al 255 sin signo).
Representaciones de IEEE 754 Exponente Mantisa Representación e = e min 1 m = 0 0 e = e min 1 m 0 0.m x 2 e min e min e e max - - - 1.m x 2e e = e max + 1 m = 0 ± e = e max + 1 m 0 NaN Tabla: IEEE754 Valores especiales
Pasar un número decimal a IEEE 754 Supongamos: 33.75 Recordar que IEEE 754 el exponente está expresado en notación exceso 127 e min = 126 y e max = 127 Parte entera 33 = 100001 Pasar fracción decimal a binario 0.75 10 = 0.11 2 Dado que : 0.75 2 = 1.25 0.50 2 = 1.00 0.0 2 = 0.0 33.75 = 100001.110 = 1.00001110X 2 5 = 1.00001110X 2 10000100 ya que 5 = 132-127 en notación exceso 127 por lo tanto el 5 se representa como el 132 = 1 2 7 +0 2 6 +0 2 5 +0 2 4 +0 2 3 +1 2 2 +1 2 1 +1 2 0
Pasar Decimal a IEEE 754 Ejemplo Supongamos: 3.75 signo exponente mantisa 0 1000 0000 1.1110... 0 En bits 0100 0000 0111 0000 0000 0000 0000 0000 en Hexa: 40 70 00 00 Pasar parte entera a binario. Pasar parte fraccionaria a binario. Modificar el exponente hasta que quede un dígito entero distinto de cero
Casos especiales provenientes de la aritmética Cero con signo Infinito NAN Desnormalizados
Cero con Signo Exponente Mantisa Representación e = e min 1 m = 0 0 Tabla: Formato de cero con signo Dos tipos de ceros +0 y 0 Ejemplo: 3 (+0) = +0 y +0 / 3 = 0.
Infinitos Exponente Fracción Representación e = e max + 1 m = 0 ± Tabla: Formato de infinito 5 + (+ ) = + 5 (+ ) = +0 5 (+ ) = (+ ) + (+ ) = + 5 + ( ) = ( ) + ( ) = 5 ( ) = + ( ) (+ ) = 5 (+ ) = + (+ ) ( ) = + Tabla: Ejemplos
NAN Not a Number Exponente Fracción Representación e = e max + 1 m 0 NaN Tabla: Formato de NAN Operación NAN producido por + + ( ) x 0 x / 0/0, / REM x REM 0, REM y x(when x < 0) Tabla: Operaciones que producen NAN
Números Desnormalizados, underflow gradual Exponente Fracción Representación e = e min 1 m 0 0.mx2 e min Tabla: Formato de números desnormalizados
Números Desnormalizados, underflow gradual Ejemplo Supongamos: B = 10, p = 3, y e min = 98 Op1 10 Op2 10 Diferencia 10 6.87 10 97 6.81 10 97.06 10 97 = 6.0 10 99 Tabla: Ejemplo numérico de desnormalización Su representación desnormalizada es 0.6 10 98
Resolución con un convertidor IEEE 754
Lenguaje C: float, printf y %f, Python print %f, %.2f En la declaración de variables f indica una variable de tipo float Dentro del printf, %f imprime una variable de tipo float En Python >>> r=23.456787 >>> print %2.f %r >>> 23 >>> print %.2f %r >>> 23.45 >>> print %.4f %r >>> 23.4567 print %2.f 2.344 Si pro es una variabe de tipo float print float(pro)
Algoritmo en C para calcular el promedio, con 2 digitos decimales
Algoritmo en Python
Ejercicio hacer un algoritmo en C y en Python n i=0 Mostrar para n= 5, 10,..., 100, con 2 y con 4 digitos. 1 i (1)
Bibliografía What Every Computer Scientist Should Know About Floating-Point Arithmetic http : //docs.sun.com/source/806 3568/ncg goldberg.html(1991) Computer Organization and Architecture: Designing for Performance,8/E William Stallings. ISBN-10: 0136073735. ISBN-13: 9780136073734 Publisher: Prentice Hall. Copyright: 2010 Conversor IEEE 754 http : //www.zator.com/cpp/e 2 2 4a1.htm