Punto Flotante

 
La representación de coma flotante (en inglés floating point, que significa «punto flotante») es una forma de notación científica usada en los microprocesadores con la cual se pueden representar números racionales extremadamente grandes y pequeños de una manera muy eficiente y compacta, y con la que se pueden realizar operaciones aritméticas. El estándar para la representación en coma flotante es el IEEE 754.
 

Números de punto flotante, por que son necesarios?

Como la memoria de los ordenadores es limitada, no puedes almacenar números con precisión infinita, no importa si usas fracciones binarias o decimales: en algún momento tienes que cortar. Pero ¿cuánta precisión se necesita? ¿Y dónde se necesita? ¿Cuántos dígitos enteros y cuántos fraccionarios?

Para un ingeniero construyendo una autopista, no importa si tiene 10 metros o 10.0001 metros de ancho ─ posiblemente ni siquiera sus mediciones eran así de precisas.
Para alguien diseñando un microchip, 0.0001 metros (la décima parte de un milímetro) es una diferencia enorme ─ pero nunca tendrá que manejar distancias mayores de 0.1 metros.
Un físico necesita usar la velocidad de la luz (más o menos 300000000) y la constante de gravitación universal (más o menos 0.0000000000667) juntas en el mismo cálculo.
Para satisfacer al ingeniero y al diseñador de circuitos integrados, el formato tiene que ser preciso para números de órdenes de magnitud muy diferentes. Sin embargo, solo se necesita precisión relativa. Para satisfacer al físico, debe ser posible hacer cálculos que involucren números de órdenes muy dispares. 

Básicamente, tener un número fijo de dígitos enteros y fraccionarios no es útil ─ y la solución es un formato con un punto flotante.

Cómo funcionan los números de punto flotante

La idea es descomponer el número en dos partes:

Una mantisa (también llamada coeficiente o significando) que contiene los dígitos del número. Mantisas negativas representan números negativos.
Un exponente que indica dónde se coloca el punto decimal (o binario) en relación al inicio de la mantisa. Exponentes negativos representan números menores que uno.

Este formato cumple todos los requisitos:

  • Puede representar números de órdenes de magnitud enormemente dispares (limitado por la longitud del exponente).
  • Proporciona la misma precisión relativa para todos los órdenes (limitado por la longitud de la mantisa).
  • Permite cálculos entre magnitudes: multiplicar un número muy grande y uno muy pequeño conserva la precisión de ambos en el resultado.
Los números de coma flotante decimales normalmente se expresan en notación científica con un punto explícito siempre entre el primer y el segundo dígitos. El exponente o bien se escribe explícitamente incluyendo la base, o se usa una e para separarlo de la mantisa.
 

Mantisa

Exponente

Notación científica

Valor en punto fijo

1.5

4

1.5 ⋅ 104

15000

-2.001

2

-2.001 ⋅ 102

-200.1

5

-3

5 ⋅ 10-3

0.005

6.667

-11

6.667e-11

0.0000000000667

El estándar

Casi todo el hardware y lenguajes de programación utilizan números de punto flotante en los mismos formatos binarios, que están definidos en el estándar IEEE 754. Los formatos más comunes son de 32 o 64 bits de longitud total:

Formato

Bits totales

Bits significativos

Bits del exponente

Número más pequeño

Número más grande

Precisión sencilla

32

23 + 1 signo

8

~1.2 ⋅ 10-38

~3.4 ⋅ 1038

Precisión doble

64

52 + 1 signo

11

~5.0 ⋅ 10-324

~1.8 ⋅ 10308

Aritmética en Coma Flotante en el computador.
Las Unidades aritméticas en como flotante de los computadores se construyen utilizando dos unidades aritméticas en como fija:
- Unidad de tratamiento de mantisas.
- Unidad de tratamiento de exponente.
Mas una Unidad de Control que conectará ambas unidades y que se encarga entre otras cosas de normalizar adecuadamente el resultado.
En todos los computadores se ha normalizado la notación en coma flotante al estándar IEEE-754. Este estándar posee dos formatos posibles de representación o almacenamiento de la información, aunque internamente puede utilizarse formatos con más bits para una mayor precisión.
 
 

IEEE 754
El IEEE (Instituto de Ingenieros Eléctricos y Electrónicos) ha creado un estándar para la presentación de números en coma flotante. Este estándar especifica como deben representarse los números en coma flotante con simple precisión (32 bits) o doble precisión (64 bits), y también cómo deben realizarse las operaciones aritméticas con ellos.

Simple Precisión
El estándar IEEE-754 para la representación en simple precisión de números en coma flotante exige una cadena de 32 bits. El primer bit es el bit de signo (S), los siguientes 8 son los bits del exponente (E) y los restantes 23 son la mantisa (M):
 
 
 
Al estar el dato normalizado, es decir expresado siempre como “1,…” (“uno coma algo más”), el 1 de la parte entera no se almacena, aunque nunca debemos olvidarnos que existe. El signo de la mantisa está representado en el bit 31. El campo del exponente (ne) dispone de 8 bits, empezando por el bit 23 hasta el bit 30. El campo de mantisa (nm) dispone de 23 bits, empezando por el bit 0 hasta el bit 22. Considerando el valor 1 implícito (oculto) para el primer bit de los números binarios normalizados la precisión del campo de la mantisa es de 24 bits. El valor del desplazamiento es de 127, es decir el exceso C = 2 7 -1 = 127. 
Estos tamaños de exponente y mantisa dan a la aritmética del computador un rango que cubre fracciones tan pequeñas como 2.0 diez x 10 -38 y números tan grandes como 2.0 diez x 10 38 .
 
El valor V representado por esta cadena puede ser determinado como sigue:
Si E=255 y M es no nulo, entonces V=NaN ("Not a number")
Si E=255 y M es cero y S es 1, entonces V=-Infinito
Si E=255 y M es cero y S es 0, entonces V=Infinito
Si 0
donde "1.M" se emplea para representar el número binario creado
por la anteposición a M de un 1 y un punto binario.
Si E=0 y M es no nulo, entonces V=(-1)**S * 2 ** (-126) * (0.M)
Estos son valores "sin normalizar".
Si E=0 y M es cero y S es 1, entonces V=-0
Si E=0 y M es cero y S es 0, entonces V=0 
 
0 00000000 00000000000000000000000 = 0 
1 00000000 00000000000000000000000 = -0 
0 11111111 00000000000000000000000 = Infinito 
1 11111111 00000000000000000000000 = -Infinito 
0 11111111 00000100000000000000000 = NaN
1 11111111 00100010001001010101010 = NaN 
0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5 
0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127)
0 00000000 00000000000000000000001 = +1 * 2**(-126) * 0.00000000000000000000001 = 2**(-149) (valor positivo más pequeño)
 
Doble precisión
El estándar IEEE-754 para la representación en doble precisión de números en coma flotante exige una cadena de 64 bits. El primer bit es el bit de signo (S), los siguientes 11 son los bits del exponente (E) y los restantes 52 son la mantisa (M):
 
 
El signo de la mantisa está representado en el bit 63. El campo del exponente (ne) dispone de 11 bits, empezando por el bit 52 hasta el bit 62. 
 El campo de mantisa (nm) dispone de 52 bits, empezando por el bit 0 hasta el bit 51. Considerando el valor 1 implícito (oculto) para el primer bit de los números binarios normalizados la precisión del campo de la mantisa es de 53 bits. El valor del desplazamiento es de 1023,es decir el exceso C = 2 10 - 1 = 1023. Estos tamaños de exponente y mantisa dan a la aritmética del computador un rango que cubre fracciones tan pequeñas como 2.0 diez x 10 -308 y números tan grandes como 2.0 diez x 10 308 .
El valor V representado por esta cadena puede ser determinado como sigue:
Si E=2047 y M es no nulo, entonces V=NaN ("Not a number")
Si E=2047 y M es cero y S es 1, entonces V=-Infinito
Si E=2047 y M es cero y S es 0, entonces V=Infinito
Si 0
donde "1.M" se emplea para representar el número binario creado
por la anteposición a M de un 1 y un punto binario.
Si E=0 y M es no nulo, entonces V=(-1)**S * 2 ** (-1022) * (0.M)
Estos son valores "sin normalizar".
Si E=0 y M es cero y S es 1, entonces V=-0
Si E=0 y M es cero y S es 0, entonces V=0 
 
Precisión Extendida 
 
Formato de precisión extendida en IEEE754. 
 
 
Este formato suele reservarse normalmente para almacenar resultados intermedios, su longitud extra le permite proteger los resultados finales del redondeo y los cálculos intermedios del overflow y underflow. El bit implícito de los anteriores formatos aquí no se contempla, ya que se encuentra físicamente presente en la mantisa.