Bitácora C1 22/05/2015

Se comenzó la clase directamente con introducción al nuevo tema (ya que la clase pasada fue el parcial! 🙂 )
Se entregó una fotocopia en la que se pedía encontrar una manera para comprimir los siguientes números:
62000000000000000000000 y 0,0000000000000000000062

y la manera de resolverlo es usando notación científica. La notación científica es una manera de abreviar números muy grandes o muy chicos que tengan muchos 0, y se lo logra de la siguiente manera: Se agarra la parte del número que es distinta que 0, en este caso, 62, y se lo multiplica por 10^n, (si el numero es mayor a 1) siendo n la cantidad de 0 que tiene el numero, en este caso, 21, o se lo multiplica por 10^-n (si el numero esta entre 1 y 0) siendo n tambien la cantidad de 0 que hay en el número. Por lo tanto: 62000000000000000000000 = 62 x 10^21 0,0000000000000000000062 = 62 x 10^-21 Generalizando, en decimal un numero se puede expresar en notación científica como: N = m x 10^e Donde N es el número, m la mantisa (la parte distinta de 0), y e es el exponente mencionado anteriormente.
Esto nos sirve para introducir el nuevo tema, Punto Flotante!

Punto Flotante usa está manera de representar números para poder representar cosas muy chicas, y también cosas muy grandes. La única diferencia que nos trae problemas es que la notación científica, como vimos, se usa en el sistema decimal, por lo que, así como está, no nos sirve para utilizar en sistema binario, pero… lo podemos salvar!

En vez de utilizar la representación de un número como la composición de «mantisa x 10^exponente», lo componemos como «mantisa x 2^exponente», y con eso ya lo podemos usar en sistema binario. Eso es exactamente lo que se hace en Punto Flotante.

Ahora… Cómo utilizo una cadena para escribir un número como una composición?

Fácil, se «parte» la cadena en dos partes, mantisa y exponente, dado que son las únicas variables que entran en juego en la composición. Por lo tanto, yo puedo armar sistemas de Punto Flotante de la siguiente manera:

Elijo un sistema para representar a la mantisa, por ejemplo, BSS(2), y elijo un sistema para representar al exponente, por ejemplo, BSS(3), y luego tengo que explicitar que parte de la cadena va primero, y que parte de la cadena va después, en este caso yo elegí que la mantisa vaya primero, y el exponente después ( e: BSS(2) / m: BSS(3) )

Ahora una cadena para nuestro sistema va a tener 2 bits para mantisa, y 3 bits para exponente, por lo tanto, van a ser cadenas de 5 bits.

Para interpretar una cadena en este sistema se hace lo siguiente:
* Recibo la cadena y la «parto» en mantisa y exponente, ya que voy a tener que interpretarlos por separado.

* Interpreto la mantisa en su correspondiente sistema (en este caso, BSS(2))

* Interpreto el exponente en su correspondiente sistema (en este caso, BSS(3))

* Compongo el numero con la formula (N = m x 2^e)

Ejemplo: 11110    e: BSS(2) / m: BSS(3)

* Parto la cadena -> 11 = m, 110 = e.

* Interpreto la mantisa -> I<BSS(2) 11> = 3

* Interpreto el exponente -> I <BSS(3) 110> = 6

* Compongo el número -> N = 3 x 2^6 = 3 x 64 = 192.

Luego pasamos a calcular el rango, con lo que necesitamos saber el máximo y el mínimo número representable…

Cómo saber cuál es el máximo y el mínimo representable? Veamos un par de ejemplos

  1. Exponente CA2(5) / Mantisa BSS(8)
    1. Máximo: I(01111 11111111) = I(11111111) *  2^15 = 255 * 2^15
    2. Mínimo: I(00000 00000000) = I(00000000) * 2^0 = 0 * 2^0, El número 0! (con cualquier exponente, en este caso elegí 2^0, pero puede ser cualquiera)
  2. Signo / Exponente CA2(5) /Mantisa Magnitud(7) (El signo y la magnitud del SM(8) estan separados, el signo al principio de la cadena, la magnitud al final)
    1. Máximo: I(0 01111 1111111) = +I(1111111) *  2^15 = +127 * 2^15
    2. Mínimo: I(1 01111 1111111) = +I(1111111) *  2^15 = – 127 * 2^15

Y así como podemos calcular el rango, también podemos calcular la resolución, pero…

Cuál es la resolución de estos sistemas? Veámoslo en el sistema e: BSS(2)/m: BSS(2),

Considerando la cadena: 1010. ¿Cuál es el siguiente número representable? el representado con la cadena 1011 o el de la cadena 1110?

I(1010) = 2*2^2 = 8

I(1011) = 3*2^2 = 12   ¡ok!

I(1110) = 2*2^3 = 16

Resolución I(1011) – I(1010) = 3*2^2 – 2*2²^2= (3-2) * 2^2 = 1*2^2 = 2^2

Veamos ahora este caso ¿Que cadena sigue a la cadena 0110?

I(0110) = 2 * 2^1

I(0111) = 3 * 2^1

Resolución = I(0111) – I(0110) = 3*2^1 – 2*2`1 = (3-2) * 2^1 = 1*2^1 = 2^1

Cómo vemos, la resolución no es la misma en ambos casos. Esto se debe a que en Punto Flotante, la resolución (a diferencia con todos los otros sistemas que veníamos usando) NO es constante. La resolución varía porque tenemos un exponente que la hace variar. Cuando el exponente es menor, la resolución es menor, cuando el exponente es mayor, la resolución es mayor.

Normalización

Algo peculiar de la notación científica es la posibilidad de representar el mismo valor con distintas cadenas. Veamos este ejemplo en el sistema m:sm(8) / e:ca2(5), con el formato (s)(e)(m)

Interpretar:

  • 0 00000 0000100 → + 4 * 2⁰ = 2²
  • 0 00001 0000010 → + 2 * 2¹ = 2²
  • 0 00010 0000001 → + 1 * 2² = 2²

No es deseable tener múltiples representaciones para el mismo valor, entonces se elige una sola de ellas como cadena válida para ese número: la que comienza con 1 en la mantisa. En el ejemplo anterior la única cadena normalizada es 0 11100 1000000, pues:

e = Ica2(11100) = – I(00011+1) = -4

m = Ism(01000000) =2⁶

n= 64 * 2⁻⁴ = 2⁶*2⁻⁴ = 2²

¡Pero esto implica que se descarten la mitad de las cadenas!

Para solucionarlo, considerando que todas las cadenas empezarían con 1 entonces no tiene sentido escribir ese primer 1, y por lo tanto se lo deja implícito.

Bitácora-C1-08/05/2015

Empezamos la clase con unos minutos para consulta.

Luego se repartió una fotocopia con unos ejercicios para resolver e introducir el nuevo tema, Exceso.

  • Exceso
    • Notación: Ex(m,n), donde «m» es igual a la cantidad total de bits, y «n» es igual al delta del exceso.
    • Al momento de interpretar una cadena en Ex(m,n) se siguen los siguientes pasos:
      • Interpretamos la cadena en BSS(m), es decir, como si fuera una cadena normal en BSS con la misma cantidad de bits totales.
      • Luego al resultado le restamos el delta del exceso (n) al resultado de la interpretación.
      • Ejemplo: Interpretar la cadena «0110» en «Ex(4,2)».
        • I<BSS(4)> 0110 = 6
        • 6 – 2 = 4
        • Entonces I<Ex(4,2)> 0110 = 4.
    • Al momento de representar un número en Ex(m,n) se siguen los siguientes pasos:
      • Le sumamos al número que queremos representar el delta del exceso (n).
      • Luego al resultado lo representamos en BSS(m).
      • Ejemplo: Representar el número «4» en «Ex(4,2)».
        • 4 + 2 = 6
        • R<BSS(4)> 6 = 0110
        • Entonces R<Ex(4,2)> 4 = 0110

Después de esto continuamos la clase con unos ejercicios de exceso. Al concluir con esto se paso a dar una fotocopia para introducir un tema nuevo, Punto Fijo.

  • Punto Fijo
    • Nos sirve para poder representar números «con coma», es decir, números que tengan parte fraccionaria.
    • Notación: Punto fijo utiliza un sistema como base, ya sea BSS, SM, u otro, pero al notarlo se lo nota de la siguiente manera: «SistemaBase» (m,n), donde «SistemaBase» puede ser BSS, SM, u otro, «m» es igual a la cantidad total de bits, y «n» es igual a la cantidad de bits fraccionarios.
      • Por ejemplo, un sistema de punto fijo de 8 bits, con 3 bits fraccionarios, BSS como base se nota así: BSS(8,3).
    • Al tener ahora bits que representan a la parte fraccionaria, y bits que representan la parte entera, ocurre un cambio en los pesos de cada bit.
      • Por ejemplo, en un sistema BSS(2), el bit de la derecha «pesa» 1 (2^0), y el bit de la izquierda pesa «2» (2^1), si yo ahora utilizara un sistema de BSS(2,1) el bit de la derecha pasaría a pesar 0,5 (2^-1) y el de la izquierda 1 (2^0), es decir, la potencia a la cual esta elevada cada peso se disminuyo en 1, que es la cantidad de bits fraccionarios de nuestro «nuevo» sistema.
    • Al momento de interpretar en un sistema de punto fijo se nos presentan 2 posibilidades:
      • Hacerlo como lo venían haciendo antes, es decir, sumando los «pesos» de cada bit, pero cambiando los «pesos» de cada bit acorde al sistema de punto fijo implementado, como se explico arriba.
      • O bien, interpretando la cadena normalmente, sin cambiar los «pesos» de los bits, y luego dividiendo el resultado por «2^n», siendo «n» la cantidad de bits fraccionarios del sistema.
        • Por ejemplo, si quiero interpretar la cadena «0101» en «BSS(4,1)» puedo proceder de las siguientes maneras:
          • Sumo los «pesos» de cada bit: 0x2^2 + 1×2^1 + 0x2^0 + 1×2^-1 = 2 + 0,5 = 2,5
          • O bien, lo interpreto en BSS(4) y luego lo divido por 2^(dado que la cantidad de bits fraccionarios es 1).
            • I<BSS(4)> 0101 = 5.
            • 5 / 2^1 = 5 / 2 = 2,5