Introducción
La aritmética en coma flotante ha sido objeto de polémicas y múltiples formas de implementarla (quizás más adelante escriba una entrada sobre los métodos más extendidos) pero fue en 1985 cuando el IEEE [1] terminó y publicó un documento donde estandarizaba la forma de representar los números en punto flotante y cómo realizar las operaciones aritméticas. Esta norma se conoce como IEEE 754, y ha sido un fuerte dolor de cabeza para más de un estudiante de Informática en su primer año.
A día de hoy se considera el estándar de facto en todos los ordenadores personales. Pero, ¿cómo funciona exactamente?
Representación
Simplificando a dos modalidades la norma define dos resoluciones posibles para los números. Véase la figura 1. Simple precisión (32 bits) y doble precisión (64 bits).
Matemáticamente, ¿cómo funciona este sistema de representación? Dado un número real “x” será representado como su signo, multiplicado por el valor de su mantisa (número normalizado tipo notación científica) y multiplicado además por la base de representación elavada al valor del exponente sesgado.
(1)
(2)
Hablando en términos de representación numérica en computadores y tomando como ejemplo el caso de simple precisión donde se reserva un bit para el signo, 8 bits para el exponente y 23 bits para la matisa tenemos:
- Bit de signo: 0 positivo / 1 negativo
- El exponente se representa sesgado al valor dado por la formula (2). En el caso de simple presición sería: exps = 2^(8-1)-1=2^7-1=127.
- La mantisa en binario es un número del tipo 1.xxxxx donde el primer 1 no fraccionario se asume y no se representa dentro del formato.
Curiosidades
Número más grande representable:
Número más pequeño representable (positivo y no cero):
Tendiendo a cero hay una serie de números reales no representables:
Referencias
- Instituto de Ingenieros Eléctricos y Electrónicos (IEEE o IE3): http://www.ieee.org/index.html
- Grupo del IEEE sobre la norma 754: http://grouper.ieee.org/groups/754/
- Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic: http://www.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF
- Conversor entre decimal <–> IEEE754: http://www.h-schmidt.net/FloatConverter/
- Conversor entre decimal <–> IEEE754: http://users.minet.uni-jena.de/~sack/SS04/download/IEEE-754.html
- http://es.wikipedia.org/wiki/Intel_8087
- An Interview with the Old Man of Floating-Point; http://www.cs.berkeley.edu/~wkahan/ieee754status/754story.html
- Transparencias muy ilustrativas: http://webdelprofesor.ula.ve/ingenieria/gilberto/paralela/09_AritmeticaPuntoFlotante.pdf
pero no explicas como se hace man, como escribo 140,78 enIEEE754 si no das algun ejemplo que muestre comos se hace? me leí todo al pedo
Hola, tienes razón falta algún ejemplo. En tener tiempo editaré la entrada y pondré ejemplos fáciles y típicos para pillarte. Pero de momento para ayudarte te recomiendo le pegues una vuelta a todo esto:
http://www.h-schmidt.net/FloatConverter/IEEE754.html
http://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html
http://babbage.cs.qc.cuny.edu/IEEE-754/
http://www.zator.com/Cpp/E2_2_4a1.htm
Suerte!
muchas gracias por tu tiempo compartiendo este teorema fundamental, sigue así.
Y el ejemplo nunca llego…
Gracias por tu aportación ha sido fundamental para el resto de lectores, les será muy útil. La próxima vez si puedes y no te supone un esefuerzo puedes buscar un enlace de youtube o similar. Eres un artista quejandote sin aportar soluciones. Mi enhorabuena.
para calcular el exponente cuando cambia, a mas 127 o a menos 127
en simple precisión no puedes, debes pasar a doble precisión. Que sería la diferencia entre float o double en un C/Java
“ha dia de hoy” no lleva H en ningún sistema de representación conocido hasta la fecha.
gracias!
Buen articulo