Bitácora C1 26/05/2015

Repaso de la clase pasada.

Vimos que la matisa puede ser entera o fraccionaria. Si queremos usar una mantisa fraccionaria de 4 bits con 1 bit implicito, donde 3 de sus bits son fraccionarios entonces la expresamos como:

SM(4+1,3)
Por ejemplo, usando el ejemplo anterior la cadena 0100 corresponde al número 2,5 ya que agregando el bit implícito nos quedaría la cadena 10100 y los últimos 3 bits son los fraccionarios.

IEEE 754

IEEE 754 es el estándar que fue creado para representar puntos flotantes. Define 2 maneras de representar un número:

Precisón simple y Presición doble.
Presición simple (32 bits): Signo – exponente – mantisa
S(1) – Exc(8,127) – SM(23+1, 23)
Presición doble (64 bits): Signo – exponente – mantisa
S(1) – Exc(11,1023) – SM(52+1,52)
Estas representaciones siguen determinadas reglas según la composición de sus partes:

Clases de números en IEEE 754

1) Normalizados:

  – exponente puede ser cualquier valor menos 00..00 y 11..11
  – mantisa es fraccionaria con bit implícito entero(o sea, 2^0)
Ejemplo en presición simple:
  0080000F = 2^-126
 Ya que 0080000F = 0000 0000 1000 0000 0000 0000 0000 1111
En negrita se ve resaltado el exponente.
Pasamos a analizar el signo (el primer bit) -> 0 -> positivo
Interpretamos mantisa (agregamos al bit implícito entero al comienzo)-> I(1000 0000 0000 0000 0000 1111) = 2^0 + 2^-20 + 2^-21 + 2^-22 + 2^-23
Interpretamos exponente -> I[Exc(8,127)](00000001) = -126

2) Cero

  Representa al valor 0
  – exponente debe ser 00..00
  – mantisa debe ser 00..00
Casos posibles: 00000000 y 80000000

3) Infinitos

  Representa al valor infinito (al positivo y al negativo)
  – exponente debe ser 11..11
  – mantisa debe ser 00..00
Casos posibles: 7FB00000 y FFB00000

4) NaN (Not a number)

  Representa valores que no se pueden representar. Comúnmente se utiliza para expresar errores.
  – exponente debe ser 11..11
  – mantisa debe 00..00
Ejemplo: 7FB00001

5) Desnormalizados

  Representa valores en el rango (-1,1) excluyendo al 0.
  – exponente debe ser 00..00 y vale 126
  – mantisa debe diferente de 00..00, y es fraccionaria con bit implícito igual a 0
Ejemplo: 0000000F

Práctica

Finalmente hicimos práctica con ejercicios de rango, resolución mínima y máxima. A prácticar este tema! Recuerden que la resolución mínima es la mínima distancia que puede haber entre 2 valores representables por nuestro sistema, y resolución máxima es la máxima distancia.
Se viene una entrega!
A saber: A no dormirse con IEEE que se complica el tema!

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-12/05/2015

Repasamos punto fijo y su interpretación.
Luego vimos como representar:
  • Dado un número x a representar, operamos x*2^n donde n es la cantidad de bits fraccionarios de la cadena a representarla.

Por ejemplo, en BSS(7,3): R(5,75 * 2^3) => R(46) => 0101110
Para asegurarnos que lo hayamos hecho bien, podemos interpretar el resultado y ver que efectivamente BSS(4,3)-I(0101110) = 5,75

¿Cómo representaríamos el 0,3 en BSS(5,2)?
R(0,3) => R(0,3 * 2^2) => R(1,2) => R(1) => 00001
¿Por qué pasamos de 1,2 a 1? Porque hicimos un redondeo. Cuando calculamos la forma de representar el punto flotante, buscamos la unidad que es resultado de la multiplicación (en este último caso es el 1,2). Vemos que BSS(3,2)-I(00001) = 0,25.
Al querer representar el 0,3 obtuvimos el 0,25. Esto es por el redondeo justamente.
Entonces, si tenemos 2 bits para parte fraccionaria, ¿qué fracciones podemos representar?
Tomando el 1 por ejemplo como unidad, podemos representar el 1,00 – 1,25 – 1,50 – 1,75. Vemos que la diferencia mínima entre dos números con 2 bits fraccionarios es de 0,25.
Error absoluto: Es la diferencia entre el número que queremos representar y su representación. Por ejemplo, en el ejemplo anterior el error absoluto de 0,3 es 0,05 ya que el número que representamos (0,25) está a 0,05 de diferencia del numero a representar (0,3). Asimismo, el error absoluto de 0,2 también será 0,05.
Finalmente resolvimos entre todos el último parcialito y vimos los problemas que ocurren por no leer bien el enunciado antes de resolverlo.
Importante:
  • Sobre el parcial: Es el próximo martes y se tomarán todos los temas vistos hasta el momento (hasta error absoluto). Será a carpeta cerrada. NO se podrá usar celular ni ningún otro dispositivo electrónico similar. Se puede usar calculadora.
  • LEAN BIEN el enunciado del parcial.
  • Los miércoles de 14 a 15 Mara estará para consultar en la oficina.
  • Fede Martinez mandó por correo un parcial viejo que pueden resolver para practicar.

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

Bitácora-C1-05/05/2015

Motivación

Comenzamos trabajando con un hipotético sistema de cadena decimal de un dígito.
Entonces, los dígitos con los respectivos valores que interpretan son:
Cadena: 0    1    2    3    4    5    6    7    8    9
Valor:     0    1    2    3    4   -5   -4   -3   -2   -1
ruedaVemos que el rango es [-5, 4]
Lo interesante es que al sumar dos cadenas, la cadena resultante representa el valor correcto. Por ejemplo, 3 + 6 = 9. Si interpretamos esta expresión nos queda 3 + (-4) = (-1) lo cual es correcto.
Si a este sistema lo pasamos a cadena binaria de 3 dígitos nos quedará:
Cadena: 000 001 010 011 100 101 110 111
Valor:       0     1     2     3    -4    -3    -2    -1
ruedabinariaVemos que el rango es [-4,3]. Recordando que SM(3) tiene rango [-3,3], vemos que hemos ganado un valor representable (ya que tenemos una única cadena para el valor 0).

Complementación de cadenas:

Dada una cadena, si queremos obtener su complemento (cadena de misma magnitud, diferente signo) deberemos de seguir estos pasos:
  1. Invertir bits
  2. Sumar 1
Entonces, dada la cadena 001 (que representa al 1), su complemento será:
  1. Invertimos bits: 001 –> 110
  2. Sumamos 1:     110 + 1 –> 111

Efectivamente, la interpretación de 111 es (-1), que es el complemento del 1.

Interpretación

  • ¿Cómo interpretamos una cadena que empieza con 0 en CA2? Simplemente como veníamos interpretando en BSS.
    si C comienza con 0 entonces Ica2(C) = Ibss(C)
  •  ¿Cómo interpretamos una cadena que empieza con 1 en CA2? Una manera es interpretando su complemento y luego multiplicarlo por (-1) (cambiarle el signo).
    si C comienza con 1 entonces Ica2(C) = -(1) x Ibss(comp(C))

Representación

  • ¿Cómo representamos un número positivo en CA2? Simplemente como se representa en BSS. Ojo con el rango!
    si x>=0 entonces Rca2(x)= Rbss(x)
  •  ¿Cómo representamos un número negativo en CA2? Para utilizar el mecanismo de representación conocido (BSS), debemos tomar su opuesto (o valor absoluto) y luego complementar la cadena resultante.
    si x<0 entonces Rca2(x)=comp( Rbss( |x| ) )

 Para el viernes:

  1. Investigar sobre el sistema de numeración Exceso.
  2. Revisar las practicas y completar el siguiente formulario.