Números de punto flotante

Por qué son necesarios los números de punto flotante

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 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:

Este formato cumple todos los requisitos:

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

Hay algunas pecularidades:

© Publicado en http://puntoflotante.org/ bajo una licencia Creative Commons Atribución Unported (BY). Original en inglés por Michael Borgwardt en http://floating-point-gui.de/.

Fork me on GitHub