Estándar IEEE 754 para la representación en coma flotante

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).

Formato de representación para el estándar IEEE 754 (en simple y doble precisión). Imagen gracias a IBM.

Figura 1: Formato de representación para el estándar IEEE 754 (en simple y doble precisión). Imagen gracias a IBM.

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.
Más adelante realizaremos algún ejemplo práctico, veremos números especiales como NaN , Infinito o el cero. De momento dejo unas curiosidades.

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

  1. Instituto de Ingenieros Eléctricos y Electrónicos (IEEE o IE3): http://www.ieee.org/index.html
  2. Grupo del IEEE sobre la norma 754: http://grouper.ieee.org/groups/754/
  3. Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic: http://www.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF
  4. Conversor entre decimal <–> IEEE754: http://www.h-schmidt.net/FloatConverter/
  5. Conversor entre decimal <–> IEEE754: http://users.minet.uni-jena.de/~sack/SS04/download/IEEE-754.html
  6. http://es.wikipedia.org/wiki/Intel_8087
  7. An Interview with the Old Man of Floating-Point; http://www.cs.berkeley.edu/~wkahan/ieee754status/754story.html
  8. Transparencias muy ilustrativas: http://webdelprofesor.ula.ve/ingenieria/gilberto/paralela/09_AritmeticaPuntoFlotante.pdf