Notas complementarias sobre aritmética computacional. José María Foces Morán, Universidad de León 0.1. CAMBIOS DE BASE 0.1. 3 Cambios de base Exercise 1. Realizad los cambios de base indicados y la comprobación correspondiente mediante el cambio de base inverso: Para realizar estos ejercicios, tened en cuenta que en los cambios a base 10, recomendamos emplear el TFN en aritmética sin signo (TFN/ASS) para números enteros o para números en coma fija: Xb = i=−m X xi · bi i=n−1 Exercise 2. 8759 = X10 8759 = 8 · 92 + 7 · 91 + 5 · 90 = 648 + 63 + 5 = 71610 En los cambios de base desde base 10 a cualquier otra base, recomendamos la aplicación del teorema de la división entera (Por la base de destino). Recordad que x mod b ⊆ {0, 1, 2, ..., b − 1}. La conversión de la parte fraccionaria se lleva a cabo mediante multiplicaciones sucesivas, en cada una de ellas comprobando el transporte producido a la parte entera; este proceso se detiene cuando se ha llegado a una determinada precisión prefijada de antemano, porque, un número en coma fija en una determinada base puede necesitar un número finito de cifras, mientras que en otra base, puede necesitar un número infinito de cifras con una cierta periodicidad. Como comprobación, realizaremos ahora el cambio inverso: Exercise 3. 71610 = X10 71610 = 9 · 79 + 5 7910 = 9 · 8 + 7 810 = 9 · 0 + 8 por tanto: 71610 = 8759 Exercise 4. 2F C16 = X10 Exercise. 4A8E 16 = X10 Exercise 5. 6510 = X2 Exercise. 12710 = X2 Exercise 6. 17, 29310 = X2 En un primer paso calculamos la parte entera: 1710 = 24 + 20 = 000100012 . Ahora, calculamos la parte fraccionaria mediante multiplicaciones sucesivas: 0, 29310 × 2 = 0, 58610 , el transporte es 0 0, 58610 × 2 = 1, 17210 , el transporte es 1 0, 17210 × 2 = 0, 34410 , el transporte es 0 0, 34410 × 2 = 0, 68810 , el transporte es 0 0, 68810 × 2 = 1, 37610 , el transporte es 1 0, 37610 × 2 = 0, 75210 , el transporte es 0 0, 75210 × 2 = 1, 50410 , el transporte es 1 0, 50410 × 2 = 1, 00810 , el transporte es 1 y detendremos aquí el proceso de conversión, el resultado es el siguiente: 0, 29310 = 0, 010010112 , reuniendo las prates entera y fraccionaria, obtenemos el siguiente resultado: 4 17, 29310 = 00010010, 010010112 . Por último, aplicamos el TFN/ASS para comprobar el resultado: 00010001, 010010112 = 1 · 24 + 1 · 20 + 1 · 2−2 + 1 · 2−5 + 1 · 2−7 + 1 · 2−8 = 17, 29296875310 ' 17, 29310 . Hemos obtenido una representación aproximada del número original en base 10. Exercise 7. f 3a816 = X10 realizando la conversión a base 2, en primer lugar. Puesto que 16 = 24 , haremos la conversión a base 2 considerando que cada dígito hex representa 4 bits (bn → b) y, teniendo en cuenta la tabla de conversión de binario natural a hex, convertimos cada dígito hex en cuatro bits em binario natural: f 3a816 = 1111 0011 1010 10002 , ahora, aplicando TFN/ASS convertimos a base 10: 1111 0011 1010 10002 = 1 · 215 + 1 · 214 + 1 · 213 + 1 · 212 + 1 · 29 + 1 · 28 + 1 · 27 + 1 · 25 + 1 · 23 = 6237610 También, podríamos haber convertido de base 16 a base 10 directamente, mediante TFN/ASS, teniendo en cuenta el valor de cada dígito hex en base 10: f 3a816 = f16 · 163 + 316 · 162 + a16 · 161 + 816 · 160 = 1510 · 163 + 310 · 2 16 + 1010 · 161 + 810 · 160 = 6237610 Exercise 8. ab00, 1a0f16 = X10 Emplead el mismo procedimiento del ejercicio anterior. Exercise 9. 10001100, 000000012 = X16 Observad que el cambio es de b → bn , por tanto, agruparemos en grupos de 4 bits, cada uno de los cuales dará lugar a un dígito hex. 0.2. Realizad las siguientes operaciones aritméticas directamente en las bases utilizadas. Suponemos que estamos trabajando en aritmética sin signo (ASS) en todos los casos. Exercise 10. 358216 + AF 1816 = E49A16 La suma en base 16 produce transporte cuando la suma de dos dígitos supera el valor F, ese transporte, como en las demás bases, se manifiesta como un valor 1 que hay que sumar a los operandos que constituyen la columna contigua izquierda. Puesto que la suma puede producir transporte, al sumar dos operandos de n bits cada uno, el resultado se tendrá que representar con n+1 bits, en general; a este transporte, en la suma, se le conoce como acarreo (carry) o desbordamiento en aritmética sin signo. Exercise 11. E49A16 − 358216 La resta se opera del mismo modo que la resta en base 10, teniendo en cuenta que los transportes se producen al sobrepasar el valor F. Comprobad que el resultado es correcto comparándolo con el primer operando del ejercicio anterior. Tened en cuenta que la resta, en ningún caso produce desbordamiento. Exercise 12. Realizad los dos ejercicios anteriores cambiando los operandos a base 2, previamente. 0.5. PRECISIÓN Y EXACTITUD EN LA REPRESENTACIÓN DE NÚMEROS FRACCIONARIOS EN COMA FIJA. 5 0.3. Multiplicación por bk , k ⊆ Z. La multiplicación de un número escrito en base b por bk produce un desplazamiento de k dígitos a la izquierda si k es positivo, si k es negativo, produce el mismo desplzamiento, pero a la derecha. En el primer caso, tenemos una multiplicación por b|k| , en el segundo caso, tenemos una división por b|k| . Exercise 13. Calculad 1010012 × 26 aplicando la propiedad anterior. Comprobad que el resultado es correcto. Exercise 14. Calculad 1010012 × 2−6 aplicando la propiedad anterior. Comprobad que el resultado es correcto. Exercise 15. Realizad los ejercicios anteriores cambiando los operandos a base 10 previamente. Comprobad que los resultados son correctos. Exercise 16. Calculad f 10216 × 16−2 . Comprobad que el resultado obtenido es correcto. 0.4. Definición de bit como unidad de medida de la entropía de Shannon. La entropía de Shannon mide la información producida al realizar un experimento aleatorio, por ejemplo, al tirar una moneda, podemos obtener cara o cruz y, si suponemos que la moneda es físicamente simétrica, la probabilidad de obtener cara será 1/2 igual a la probabilidad de obtener cruz. La información producida al realizar cada instancia del experimento viene dada por la siguiente fórmula conocida como entropía, la cual es debida a Claude Shannon: r−1 X 1 Hr (S) = pi · log2 bits pi i=0 En nuestro caso r = 2, por tanto: Hr (S) = 1 X i=0 pi · log2 1 1 1 1 1 = · log2 2 + · log2 2 = + = 1bit pi 2 2 2 2 El término bit, puede tomar dos significados: BIT como binary digit o símbolo binario. Este es el sentido explicado en clase. Como unidad de medida de información o entropía de Shannon Exercise 17. Calculad la información producida al tirar una moneda asimétrica cuya probabilidad de obtener cara es 0,1. Intuitivamente, antes de efectuar ningún cálculo ¿Creéis que se produce más información en este caso, o en el anterior? Explicad el porqué. 0.5. Precisión y exactitud en la representación de números fraccionarios en coma fija. Los computadores digitales, habitualmente, representan sus estados mediante dos niveles eléctricos, los cuales son representados mediante los símbolos 0 y 1. Los niveles eléctricos concretos dependen de la tecnología electrónica concreta empleada en cada caso, por ejemplo, un mismo computador puede emplear 6 niveles eléctricos diferentes en el circuito integrado que contiene la CPU y en la memoria, por ello, es habitual que se empleen interfaces que adaptan los niveles cuando se produce la conexión de un elemento a otro. En cualquier caso, los estados posibles se representan mediante los símbolos 0 y 1. Toda la información que maneja un computador se representa mediante símbolos 0 y 1, en concreto, concatenaciones de estos dos símbolos que pueden dar lugar a las representaciones de los tipos de datos enteros, fraccionarios, caracteres, etc. El computador que estudiamos en esta asignatura tiene una arquitectura de set de instrucciones denominada MIPS-32, indicando que su ancho de palabra (word) es de 32 bits, lo cual significa que los registros de propósito general son de 32 bits, por tanto, este microprocesador puede llevar a cabo una operación aritmética con dos operandos, cada uno de ellos de 32 bits de ancho. Ahora, podríamos preguntarnos ¿Qué significado tiene cualquiera de las posibles words? Si conisderamos que el significado es número entero considerado en aritmética sin signo (ASS) ¿Qué rango de enteros se pueden representar? Estas y, otras preguntas similares, nos proponemos responderlas en las secciones que siguen. 0.5.1. Error de representación. Los computadores digitales tienen una capacidad de representación finita y, en general, para un número cualquiera, pueden proveer solamente una aproximación, el error cometido al tomar la representación computaciónal (Una aproximación) por el valor real viene dado por la diferencia entre ambos, tomada en valor absoluto: εrep = |X − Xaprox | Este error ha de estar acotado para poder emplear al computador en la realización de cálculos aritméticos ya que, obviamente, afecta a la exactitud de los mismos. 0.5.2. Eficiencia de una representación binaria. Ya hemos comentado anteriormente que toda la información manejada por un computador está representada mediante concatenaciones de bits, por ejemplo, los enteros con signo (ACS) se representan mediante words-32, de lo cual, resulta un rango de enteros con signo representables y una precisión. El rango viene dado por el menor y el mayor de la representación, por ejemplo, en MIPS, empleando complemento a 2, tenemos: V R2,32 = 232 = 4Gpalabras, de las cuales, la mitad son negativas y la otra mitad son positivas o nulas, es decir, el rango viene dado por: −231 , 231 − 1 . La precisión viene dada por la separación mínima entre dos enteros consecutivos cualesquiera, es decir, 1. La precisión que emplearemos en las representaciones, tanto de enteros como de fraccionarios en coma fija, es una precisión fija. Existe una representación de números reales aproximados, conocida como representación en punto flotante, la cual, presenta una precisión variable. El error cometido al usar una representación de rango y precisión finitas se produce al no poder representar cualquier número con exactitud arbitraria, por ejemplo, al representar el número 29, 052 en un formato de coma fija con dos dígitos para la parte enteros y dos dígitos para la parte fraccionaria, viene dado por la siguiente expreesión, teniendo en cuenta que la precisión es 0, 01 y que, por tanto, no existe ningún número entre 29, 05 y 29, 06. Supongamos que elegimos como representación del número dado al número 29, 06: εrep = |X − Xaprox | = |29, 06 − 29, 052| 0.5. PRECISIÓN Y EXACTITUD EN LA REPRESENTACIÓN DE NÚMEROS FRACCIONARIOS EN COMA FIJA. 7 Podríamos haber considerado escoger 29, 05, en cualquiera de los casos, el error máximo vendrá dado por la precisión: 0,01. Los números que están fuera del rango legítimo, al no poder representarse, no consideramos sus aproximaciones, obviamente. Nos encontramos con dos formas de llevar a cabo la aproximación: 1. Mediante un truncamiento. En este caso, simplemente descartamos los dígitos del número que no pertenecen a la representación. En nuestro caso, el truncamiento se llevaría a cabo del siguiente modo, sin realizar ninguna operación de cálculo: 29, 052 → 29, 05. Es fácil comprender que el error máximo está dado por la precisión, en este caso, el resultado es aceptable porque el tercer dígito es un 2 y el error es 0, 002, pero, si el número a representar hubiera sido 29, 059, el error cometido habría sido 0, 009. 2. Mediante un redondeo. Sumamos la mitad de la precisión: 0,01 2 = 0, 005, al número: 29, 052 + 0, 005 = 29, 057 y, a continuación, truncamos el resultado: 29, 05. El error cometido es: 0, 002. ¿Qué error cometeríamos en el caso de querer representar 29, 059? 29, 059 + 0, 005 = 29, 064, el cual, al ser truncado resulta en: 29, 06, dando un error de εrep = |29, 06 − 29, 059| = 0, 001. Exercise 18. En una representación de coma fija con tres dígitos para la parte entera y 3 dígitos para la parte fraccionaria, responded a las siguientes cuestiones: Calculad la precisión Calculad el error de truncamiento cometido al representar 345, 001856. Calculad el error de redondeo al redondear 345, 001856. Repetid los cálculos de error para 345, 00119. Exercise 19. En una representación de coma fija, en base binaria, con tres dígitos para la parte entera y 3 dígitos para la parte fraccionaria, responded a las siguientes cuestiones: Calculad la precisión Calculad el error de truncamiento cometido al representar 101, 01110. Calculad el error de redondeo al redondear 101, 01110.