Práctica 1: Representación de números Organización del Computador I DC - UBA 2do. Cuatimestre 2014
Menú del día Hoy vamos a ver: Representación de numeros Aritmética en otras bases (no decimales) Cambios de bases Representaciones habituales de numeros enteros Representaciones habituales de numeros reales
Cómo se representan las cosas? Cada concepto se puede representar de varias maneras. Por ejemplo: el vigésimo elemento de los números naturales sin el cero. Si se escribiese en la antigua Roma hubiese sido: XX Si se escribiese acá mismo, sería: 20 Aunque... también podría haber sido: 10100
Sistemas no posicionales: Los porotos Para representar un número natural podemos usar: En este caso, representan el número 27. Importa el orden de los porotos?
Sistemas no posicionales: Tanteando en el truco Cuando jugamos al truco, anotamos los puntos de una manera particular: Aquí vemos que un equipo tiene 11 puntos y el otro 6. Importa el orden de los palitos? Sólo los juntamos para contar más rápido...
Sistemas posicionales: Sistema decimal Un sistema decimal utiliza un conjunto que tiene 10 símbolos. Usualmente utilizamos estos: Qué número representa la siguiente tira de símbolos? 478 Podría ser 4 + 7 + 8 = diecinueve?
Qué es una base? El sistema decimal utiliza un conjunto de 10 símbolos para representar los números. Así, en cada numeral, la posición de cada símbolo está relacionada con una potencia de 10. Y si en vez de diez símbolos tuviéramos otra cantidad? A esa cantidad la llamamos base
Representaciones e interpretaciones de números. Qué números pueden representar las siguientes cadenas? 10 478 2011 ORGA1 Dada la representación de un número, puedo saber qué base se está utilizando?
Bases. En base 2, usamos los símbolos 0 y 1 y escribimos los naturales: 0, 1, 10, 11, 100, 101, 110... En base 3, usamos los símbolos 0, 1 y 2 y escribimos los naturales: 0, 1, 2, 10, 11, 12, 20......y así... Bases más comunes Base Símbolos usados 2 (binario) 0, 1 8 (octal) 0, 1, 2, 3, 4, 5, 6, 7 10 (decimal) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 16 (hexadecimal) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Es posible cambiar un número de una base a otra? Cómo escribirían un programa que lo haga?
Cambios de bases: Teorema de la división. Teorema Sean a Z y b N. Existen q, r Z con 0 r < b tales que a = b q + r Además, q y r son únicos. Ejercitación Escribir los siguientes números en binario, octal y hexadecimal. diez quinientos doce
Sumando... En decimal En base 3 8 4 5 2 1 2 + 3 4 2 + 1 0 1 1 1 8 7 1 0 2 0
Multiplicando... En base 3 1 2 2 1 1 2 1 0 1-1 0 2 2
Tiras de símbolos Si sólo podemos escribir tiras de símbolos de longitud fija: cuántos números podemos representar? de qué depende? OJO AL PIOJO! Al operar con precisión fija, podemos tener overflow Ocurre overflow cuando el resultado de una operación necesita una tira de símbolos más grande que la disponible
Hasta aca: números naturales Por ahora sabemos... Leer naturales Escribir naturales Cambiarlos de base Operar con naturales (sumarlos, multiplicarlos) Y qué hacemos con los enteros?
Codificando números enteros en base binaria Sin signo solo sirve para positivos. Signo+Magnitud se usa un bit para indicar el signo Complemento a 2 los positivos se representan igual número negativo n como 2 k + n Exceso m represento n como m + n
Codificando... En base 2, numerales de 4 bits Signo+Magnitud Complemento a 2 Exceso a 15 3 0011 0011 OVERFLOW -2 1010 1110 1101-8 OVERFLOW 1000 0111
Codificando...(con más bits) En base 2, numerales de 8 bits Signo+Magnitud Complemento a 2 Exceso a 15 3 0000 0011 0000 0011 0001 0010-2 1000 0010 1111 1110 0000 1101-8 1000 1000 1111 1000 0000 0111
Codificando...(con más bits) Similitudes entre 4 y 8 bits Signo+Magnitud Complemento a 2 Exceso a 15 3 0000 0011 0000 0011 0001 0010-2 1000 0010 1111 1110 0000 1101-8 1000 1000 1111 1000 0000 0111 Extendiendo la cantidad de bits de presición: Signo+Magnitud: Se extiende con 0 s, pero el bit más significativo se mantiene indicando el signo. Complemento a 2: Se extiende con el valor del bit más significativo. Complemento a m: Se extiende siempre con 0 s.
Resumiendo: Codificando números enteros en numerales binarios Sin Signo Solo sirve para los positivos. numeral número que representa 1111 15 10 1110 14 10 1101 13 10 1100 12 10 1011 11 10 1010 10 10 1001 9 10 1000 8 10 0111 7 10 0110 6 10 0101 5 10 0100 4 10 0011 3 10 0010 2 10 0001 1 10 0000 0 10 Para los numerales de 4 bits.
Resumiendo: Codificando números enteros en numerales binarios Signo+Magnitud El primer bit es el signo, los demás son el significado (la magnitud del número en valor absoluto). numeral número que representa 1111 7 10 1110 6 10 1101 5 10 1100 4 10 1011 3 10 1010 2 10 1001 1 10 1000 0 10 0111 7 10 0110 6 10 0101 5 10 0100 4 10 0011 3 10 0010 2 10 0001 1 10 0000 0 10 Para los numerales de 4 bits.
Resumiendo: Codificando números enteros en numerales binarios Complemento a dos Los numerales que representa positivos son iguales a los anteriores Para los negativos, dado un n negativo se representan escribiendo 2 k + n en notación sin signo cuentas numeral número que representa 2 4 + ( 1) = 15 1111 1 10 2 4 + ( 2) = 14 1110 2 10 2 4 + ( 3) = 13 1101 3 10 2 4 + ( 4) = 12 1100 4 10 2 4 + ( 5) = 11 1011 5 10 2 4 + ( 6) = 10 1010 6 10 2 4 + ( 7) = 9 1001 7 10 2 4 + ( 8) = 8 1000 8 10 0111 7 10 0110 6 10 0101 5 10 0100 4 10 0011 3 10 0010 2 10 0001 1 10 0000 0 10 Para los numerales de 4 bits.
Codificando números enteros en numerales binarios Exceso a m El número n se representa como m + n cuentas numeral número que representa 5 + (10) = 15 1111 10 10 5 + (9) = 14 1110 9 10 5 + (8) = 13 1101 8 10 5 + (7) = 12 1100 7 10 5 + (6) = 11 1011 6 10 5 + (5) = 10 1010 5 10 5 + (4) = 9 1001 4 10 5 + (3) = 8 1000 3 10 5 + (2) = 7 0111 2 10 5 + (1) = 6 0110 1 10 5 + (0) = 5 0101 0 10 5 + ( 1) = 4 0100 1 10 5 + ( 2) = 3 0011 2 10 5 + ( 3) = 2 0010 3 10 5 + ( 4) = 1 0001 4 10 5 + ( 5) = 0 0000 5 10 Para los numerales de 4 bits en exceso 5.
Oooootro tema: Sistema decimal con coma Números enteros la posición de cada símbolo refiere a una potencia de 10 Números fraccionarios pasa lo mismo 10 1 10 0 10 1 10 2 10 3 7 4, 3 1 2 7 10 4 1 3 0, 1 1 0, 01 2 0, 001
En general Si b es la base, utilizamos b símbolos para representar números entre 0 y b 1 interpretamos los numerales como: n (a n a n 1 a 0, a 1 a k+1 a k ) b = a i b i i= k
Ejercicios Expresemos en base 10 (base decimal) (327, 752) 8 (327, 752) 8 = (3 8 2 + 2 8 1 + 7 8 0 + 7 8 1 + 5 8 2 + 2 8 3 ) 10 (327, 752) 8 = (215, 9570313) 10 (10, 001) 2 (10, 001) 2 = (1 2 1 + 0 2 0 + 0 2 1 + 0 2 2 + 1 2 3 ) 10 (10, 001) 2 = (2, 125) 10 (10, 001) 11 (10, 001) 11 = (1 11 1 + 0 11 0 + 0 11 1 + 0 11 2 + 1 11 3 ) 10 (10, 001) 11 = (11, 00075131480090157776) 10
Cambiando de base Cómo hacemos para escribir el (2, 375) 10 en binario? Entonces vamos por partes (2, 375) 10 = (2) 10 + (0, 375) 10 Parte entera: lo visto hasta ahora Parte fraccionaria: qué hacemos?
Un algoritmo Quiero expresar (0, 375) 10 en base 2 1. Multiplico el número por la base 0, 375 2 = 0, 75 2. Multiplico la parte fraccionaria del resultado por la base 0, 75 2 = 1, 5 3. Si el resultado no tiene parte fraccionaria, termino Si no, repito el paso 2 En este caso tengo que repetir el resultado tiene parte fraccionaria 0, 5 2 = 1 Listo! (0, 375) 10 = (0, 011) 2
Ejercicios Expresar (8, 25) 10 en base 4 Expresar (12, 30) 10 en base 2
Representando reales Punto fijo: representa la parte entera y fraccionaria por separado Punto flotante: sigue la idea de notación científica
Punto fijo Para representar números de punto fijo Representamos la parte entera usando alguno de los métodos vistos en la clase pasada sin signo con signo complemento a 2 exceso m Representamos la parte fraccionaria en la base b
Punto Fijo - Ejemplo Defino un sistema de punto fijo: 4 bits para la parte entera, y otros 4 para la fraccionaria Yo decido que el sistema sólo representará reales positivos (codificación sin signo de 4 bits) por lo que la representación de la parte entera no necesita poder expresar signo Arbitrariamente decido que la parte entera se escribe primero Parte entera: Parte fraccionaria: Notación Si escribo 10010001, debe entenderse: Parte entera: 1 0 0 1 Parte fraccionaria: 0 0 0 1
Punto fijo 1. Cuál es el real representable más grande? y el más chico? 00000000 = (0, 0)2 = (0, 0) 10 11111111 = (1111, 1111)2 = (15, 9375) 10 2. Cuál es el mínimo real representable mayor a cero? 00000001 = (0, 0001)2 = (0, 0625) 10 3. Cuál es el máximo real representable menor a uno? 00001111 = (0, 1111) 2 = (0, 9375) 10 4. Muestre un número racional que esté entre el cero y el mínimo real representable mayor a cero. (0, 00001) 2 = (0, 03125) 10 5. Muestre un número no racional que sea menor al máximo representable y mayor al mínimo. Se puede representar?
Underflow Cómo representamos... un número que es más pequeno en módulo que el menor real distinto de cero representable? Recien encontramos uno para nuestro sistema: (0, 00001) 2 No podemos representarlo exactamente Única opción: representarlo como (0) 2 o como (0, 0001) 2 Nos importa? Depende... Errores de redondeo pueden hacer que 0,1 + 0,2 = 0,30000000000000004
Punto flotante Recordemos La mantisa (m) representa un número fraccionario El exponente (e) es a lo cual se debe elevar la base Si b es la base entonces el número representado es m b e Tanto la mantisa como el exponente pueden representarse: con signo sin signo con notación complemento con notación exceso m.
Punto flotante - Ejemplo Defino un sistema de punto flotante: 4 bits para el exponente y otros 3 bits para la mantisa Representación del exponente: signo+magnitud Representará sólo reales positivos por lo que la representación de la mantisa no necesita poder expresar signo. Y otra definición: la interpretación debe ser 0, mantisa 2 exponente es decir tengo un cero impĺıcito. Notación Si escribo 1001001, debe entenderse: Exponente: 1 0 0 1 Mantisa: 0 0 1
Punto flotante - Ejemplo 1. Qué real se codifica con 1110111? (0, 111 10 110 ) 2 = (0, 875 2 6 ) 10 = (0, 013671875) 10 2. Cuál es el mayor real que podemos representar? 0111111 (0, 111 10 111 ) 2 = (0, 875 2 7 ) 10 = (112) 10 3. Dados los reales representados como 0010000 y 0101001, cuál es el mayor? 0010000 = (0, 000 10 010 ) 2 = (0) 10 0101001 = (0, 001 10 101 ) 2 = (0, 125 2 5 ) 10 = (4) 10 4. Todo real representable tiene una única codificación? 0000000 = (0, 000 10 0 ) 2 = (0) 10 0110000 = (0, 000 10 110 ) 2 = (0) 10
Representación Normalizada ejemplo Representación de punto flotante Base 2, Exponente 2 dígitos, exceso a 2 Mantisa de 2 dígitos Normalizado 1. exp\ mant 00 01 10 11 00 0,25 0,3125 0,375 0,4375 01 0,5 0,625 0,75 0,875 10 1 1,25 1,5 1,75 11 2 2,5 3 3,5 0 1 2 3
Representación Normalizada ejemplo Representación de punto flotante Base 2, Exponente 2 dígitos, exceso a 2 Excepción: cuando exponente= 00, se denormaliza y se toma como exponente 1 Mantisa de 2 dígitos Normalizado a 1.,salvo cuando exponente= 00. exp\ mant 00 01 10 11 00 0 0,125 0,25 0,375 01 0,5 0,625 0,75 0,875 10 1 1,25 1,5 1,75 11 2 2,5 3 3,5 0 1 2 3
IEEE 754 - Precisión simple Signo: 1 bit Mantisa: 23 bits (sin signo, ya que hay un bit a tal efecto) Exponente: 8 bits, exceso 127; e min = -126, e max = 127 Exponente (e) Mantisa (f ) Representación Normalizados e min e e max - - - ± 1.f 2 e Ceros e = e min 1 f = 0? 0 Denormalizados e = e min 1 f 0 ± 0.f 2 e min Infinitos e = e max + 1 f = 0 ± NaNs e = e max + 1 f 0 NaN
IEEE 754 Sea el siguiente numeral: Qué número real representa? Signo : 1 (negativo) Signo Exponente Mantisa 1 1000 0010 1111 0... 0 Exponente: (10000010) 2 = (130) 10. La codificación es exceso a 127 de 8 bits. Por lo tanto, el numeral (130) 10 representa el número entero 3. Mantisa: (0, 1111) 2 = 1 2 + 1 4 + 1 8 + 1 16 = (0, 9375) Por lo tanto (dado el 1. ímplicito), el número que representa es: 1, 9375 2 3 = 15, 5
IEEE 754 Sea el siguiente numeral: Qué número real representa? Signo : 1 (negativo) Signo Exponente Mantisa 1 0000 0000 1011 10... 0 Exponente: (00000000) 2 = (0) 10. La codificación es exceso a 127 de 8 bits. Por lo tanto, el numeral (0) 10 representa el número entero 127. Es un caso especial! (e == e min 1) Mantisa: (0, 10111) 2 Es distinto de cero! ( f 0) Por lo tanto se trata de un caso especial. El número que representa es 0, f 2 e min: (0, 10111) 2 2 126 8, 4488656465351914635252938612849 10 39
IEEE 754 Pero cómo convertimos a este formato? 1. Convertir a binario 2. Normalizar 3. Codificar el signo 4. Codificar la mantisa 5. Codificar el exponente
Ejemplo Convirtamos ( 15, 32) 10 al formato IEEE 754 de precisión simple 1. Primero tenemos que expresar el número en binario periodo {}}{ ( 15, 32) 10 = ( 1111, 01 01000111101011100001) 2 2. Ahora tenemos que normalizarlo periodo {}}{ ( 15, 32) 10 = ( 1, 11101 01000111101011100001 10 11 ) 2 3. Próximo paso, llenar la plantilla de la IEEE.
Cómo representamos el exponente? IEEE dice que tenemos que utilizar exceso 127 (11) 2 = (3) 10 entonces lo que necesitamos es pasar a binario el número (127 + 3) 10, o sea (130) 10 (130) 10 = (10000010) 2 Representado en 8 bits, el espacio que tenemos en la plantilla de precisión simple de IEEE Cómo representamos la mantisa? IEEE dice que en precisión simple tenemos 23 bits para la mantisa. Y no nos olvidemos del uno impĺıcito Teníamos nuestro número normalizado ( 1, 11101010001111010111000 }{{} 01... 10 11 ) 2 bits El uno va a ser impĺıcito. Asi que necesitamos los primeros 23 numerales después de la coma
Listo! Tenemos todo lo que necesitamos Signo: 1 Exponente: 10000010 Mantisa: 11101010001111010111000 La tira de bits que buscábamos es: 11000001011101010001111010111000 donde el marcado en rojo es el bit de la posición cero
Redondeo y Truncamiento Si queremos escribir 101,010011 2 = 5, 296875 10 en punto fijo, con cuatro bits Truncar es tomar los cuatro bits fraccionarios más significativos 101,0100 2 = 5, 25 10 Redondear es cambiar el último de acuerdo al siguiente si es cero, dejo el que estaba; si es uno, lo cambio 101,0101 2 = 5, 31225 10 Redondear suele resultar en una representación más cercana que truncar
Que vimos hoy Diferencia entre número y numeral Cómo interpretar números en distintas bases de numeración posicional Cómo expresar un número en distintas bases Precisión fija, overflow y underflow Distintas formas de representación de enteros con bits Distintas formas de representación de reales con bits Con lo visto hoy pueden hacer la práctica 1.
Bibliografía Linda Null - Julia Lobur.. Es sentials of Computer Organization and Architecture. Jones and Bartlett Publishers, Inc. Capítulo 2 Yates, Randy. Fixed-point arithmetic: An introduction. Digital Signal Labs 81.83 (2009): 198. http : //personal.atl.bellsouth.net/y/a/yatesc/fp.pdf Conversor IEEE 754 http : //www.zator.com/cpp/e 2 2 4a1.htm [Opcional] What Every Computer Scientist Should Know About Floating-Point Arithmetic http : //docs.sun.com/source/806 3568/ncg goldberg.html(1991)