Los números reales en binario tienen que almacenarse de forma especial en un ordenador. Los ordenadores representan los números como enteros binarios (números enteros que son potencias de dos), por lo que no hay una forma directa de que representen números no enteros, como los decimales, ya que no hay punto radix. Una de las formas en que los ordenadores sortean este problema es la representación en punto flotante, en la que "flotante" se refiere a que el punto radix puede subir o bajar cuando se multiplica por un exponente (potencia).


 

¿Qué es exactamente el punto flotante?

La representación en punto flotante almacena un número real como tres partes: signo, exponente y mantisa (también llamada fracción o significando). En su forma normalizada se escribe como:

valor = (−1)signo × 1.mantisa × 2^(exponente − bias)

Es decir, el número se guarda aproximadamente como un número en notación binaria normalizada (un dígito 1 antes del punto binario) multiplicado por una potencia de dos. El bias (sesgo) es un valor fijo que permite representar exponentes negativos almacenándolos como valores enteros no negativos.

Formato IEEE 754 (los más usados)

El estándar más extendido es IEEE 754. Los formatos más comunes son:

  • Simple precisión (32 bits): 1 bit de signo, 8 bits de exponente, 23 bits de mantisa. El bias es 127.
  • Doble precisión (64 bits): 1 bit de signo, 11 bits de exponente, 52 bits de mantisa. El bias es 1023.

Con estos campos se puede representar una amplia gama de valores, desde números muy pequeños (cercanos a 0) hasta números muy grandes, pero con precisión limitada por el número de bits de la mantisa.

Ejemplo práctico (6.5 en simple precisión)

Tomemos 6.5 en decimal:

  • 6.5 en binario es 110.1 (es decir, 1·2^2 + 1·2^1 + 0·2^0 + 1·2^−1).
  • Normalizando: 1.101 × 2^2.
  • El exponente almacenado = 2 + bias (127) = 129 → en binario: 10000001.
  • La mantisa es la parte después del punto (101) completada con ceros a 23 bits: 10100000000000000000000.
  • El signo es 0 (positivo).

Por tanto, los 32 bits serían: 0 10000001 10100000000000000000000, que es la codificación IEEE 754 de 6.5 en simple precisión.

Valores especiales

  • Exponente todo ceros:
    • Si la mantisa es 0 → representa ±0 (signo distingue +0 y −0).
    • Si la mantisa no es 0 → números subnormales (denormales), utilizados para representar magnitudes muy pequeñas sin el bit implícito 1.
  • Exponente todo unos:
    • Si la mantisa es 0 → ±∞ (infinito positivo o negativo).
    • Si la mantisa no es 0 → NaN (Not a Number), usado para resultados indefinidos como 0/0 o raíz de número negativo en coma flotante.

Limitaciones y precisión

Algunas características importantes a tener en cuenta:

  • Muchas fracciones decimales (por ejemplo 0.1) no tienen representación exacta en binario; se almacenan como aproximaciones. Esto provoca errores de redondeo.
  • El redondeo habitual en IEEE 754 es round to nearest, ties to even (al más cercano; en empate, al par), para reducir sesgos acumulativos.
  • Existe un epsilon de máquina (por ejemplo ~1.19e−7 para simple, ~2.22e−16 para doble) que da una idea de la precisión relativa mínima alrededor de 1.0.
  • Comprobaciones de igualdad directas (==) entre dos floats son frágiles; se recomienda comparar con una tolerancia (epsilon) adecuada al orden de magnitud.
  • Desbordamiento (overflow) ocurre si el valor absoluto excede el máximo representable → ±∞. Subdesbordamiento (underflow) puede llevar a 0 o a subnormales.

Buenas prácticas

  • Para cálculos financieros o donde la exactitud decimal es crítica, prefiera aritmética decimal exacta o tipos de punto fijo en lugar de coma flotante.
  • Evite usar igualdad estricta; compare con tolerancias relativas o absolutas según el caso.
  • Sea consciente de la acumulación de errores en sumas/operaciones repetidas; reordenar sumas o usar algoritmos de mayor estabilidad numérica puede ayudar.
  • Use doble precisión cuando necesite mayor rango y precisión, pero tenga en cuenta el mayor consumo de memoria y tiempo.

En resumen, la representación en punto flotante permite a los ordenadores almacenar y operar con números reales en base binaria usando una forma normalizada (signo, exponente y mantisa). Es eficiente y flexible, pero tiene límites de precisión y casos especiales (NaN, infinitos, subnormales) que conviene conocer para evitar errores sutiles en el software.