IIC2343 / Syllabus-2023-2

Repositorio del semestre 2023-2 del curso Arquitectura de Computadores del DCC-UC.
38 stars 1 forks source link

Duda I1 - Aproximación al próximo bit e IEEE-754 #52

Open TTrincado opened 11 months ago

TTrincado commented 11 months ago

¡Hola! Quería hacer un par de preguntas sobre IEEE 754 y sobre cómo funciona el redondeo al bit más próximo. En clases vimos un ejemplo en el que no fue necesario redondear en un algoritmo de suma entre dos números en formato IEEE754 por lo que no me quedó claro cómo se haría si se necesitara. ¿Tienen algún ejemplo de esto? Por otro lado, estoy un poco confundido con el algoritmo de multiplicación. No recuerdo haber visto en clases multiplicación entre 2 números en binario, y para esta parte se asume un poco que se debe hacer esto al multiplicar las mantisas. ¿Como funciona esta multiplicación? ¿Por último, como puedo sacar el rango y precisión de este formato? Me confunde un poco la relación a que sea un desplazamiento de 127 con esto.

Geeermy commented 11 months ago

¡Hola!

  1. En el caso del redondeo, más que "redondear", lo que hacemos es truncar: nos podemos quedar hasta con 23 bits para la mantisa, por lo que cualquier bit restante se ve descartado. Le decimos "redondeo" porque en el fondo no tenemos la capacidad de expresar el número de forma precisa. Si revisas la diapositiva 10 de esta clase, podrás ver un ejemplo donde se trunca el resultado y se pierde precisión.

  2. Para multiplicar, lo haces simplemente como haces la multiplicación en base decimal, dígito a dígito y sumando los resultados desplazados, pero considerando: 0 0 = 0, 0 1 = 0, 1 0 = 0 y 1 1 = 1. Además, recordar que al sumar cada resultado se pueden generar acarreos. Finalmente, sobre el resultado pones el punto decimal tantas posiciones a la izquieda del resultado como la suma de decimales entre ambos números multiplicados. Un ejemplo a continuación: 11.01 x 1.1

    001101 +1101

    100.111 Ponemos el punto decimal tres posiciones de derecha a izquierda porque entre los multiplicandos tenemos tres decimales en total. Aquí un video de resumen. Si transformas los números a base decimal, notarás que el resultado es consistente.

  3. El rango lo obtienes simplemente a partir del número más grande que puedes representar. En este caso, el exponente sería 11111110 (porque el 11111111 se reserva para infinitos y NaN). La mantisa sería con todos los bits iguales a 1. Entonces, el exponente máximo que puedes representar está dado por 254 - 127 = 127, eso entrega tu rango. No es necesario que calcules el valor exacto, pero el producto entre esa potencia y 1.111...1 (23 decimales) será tu máximo valor. Respecto a la precisión, solo se da por la cantidad de bits de mantisa (23) más el bit implícito (1), por lo que tienes una precisión de 24 bits de significante.

¡Espero que se entienda todo!

Geeermy commented 11 months ago

PD: Tuve que editar un poco el punto 2 porque se veía mal en GitHub, pero ahora se ve más ordenado.

TTrincado commented 11 months ago

Muchas gracias :)