Guías Desarrollo

Cómo funcionan los números de coma flotante

Cómo guardan los ordenadores los decimales como signo, exponente y fracción (IEEE 754), por qué 0,1 no es exacto, qué son el redondeo, los subnormales, el infinito y NaN, y cómo comparar y sumar flotantes sin riesgos.

Última revisión:

AdSense Placeholder
Slot: header_reference_page
En esta página

Los ordenadores guardan la mayoría de los números no enteros como valores de coma flotante: un signo, un exponente y una fracción, igual que la notación científica escribe 1,6 × 10^-1. El estándar IEEE 754 fija los detalles, de modo que un double se comporta igual en todas las máquinas. El coste es que solo algunos números pueden guardarse con exactitud. Inspeccione cualquier valor con Conversor de Flotantes IEEE 754 y compare los tipos principales en Float vs Double vs Decimal.

Signo, exponente, fracción

Un número binario de coma flotante es (-1)^signo × 1.fracción × 2^(exponente - sesgo). El 1. inicial está implícito (un «bit oculto»), de modo que un double obtiene 53 bits de precisión con 52 bits de fracción almacenados.

Ejemplo resuelto: 0,1

En doble precisión, 0,1 se guarda como los 64 bits 3fb999999999999a (hexadecimal): signo 0, exponente 1019 (es decir, 1019 - 1023 = -4) y fracción 0x999999999999a, que significa aproximadamente 1,6 × 2^-4. Como 1/10 no tiene expansión binaria finita, el valor guardado es el double más cercano:

0.1000000000000000055511151231257827021181583404541015625

El valor en precisión simple 3dcccccd es 0.100000001490116119384765625. Ninguno es igual a 0,1; el error es demasiado pequeño para verse al imprimir normalmente.

Los formatos habituales

Formato Bits Bits de exponente Bits de fracción Mayor valor Menor normal Menor subnormal Separación en 1,0
media (binary16) 16 5 10 65,504 6,10 × 10^-5 5,96 × 10^-8 9,77 × 10^-4
simple (binary32) 32 8 23 3,4028235 × 10^38 1,1754944 × 10^-38 1,4 × 10^-45 1,19 × 10^-7
doble (binary64) 64 11 52 1,7976931348623157 × 10^308 2,2250738585072014 × 10^-308 4,9 × 10^-324 2,22 × 10^-16

Valores especiales

  • El cero tiene signo: +0 y -0 son iguales al compararlos pero difieren en algunas operaciones (1 / -0 es -infinito).
  • El infinito resulta de un desbordamiento o de dividir entre cero. NaN (no es un número) resulta de 0 / 0 o sqrt(-1), y NaN no es igual a nada, ni siquiera a sí mismo.
  • Los números subnormales llenan el hueco entre cero y el menor número normal, cambiando precisión por un desbordamiento por defecto gradual.

Sorpresas de redondeo y hábitos seguros

  • Sumar diez veces 0,1 da 0.9999999999999999, no 1.
  • La suma no es asociativa: 1e16 + 1 - 1e16 es 0, pero 1e16 - 1e16 + 1 es 1, porque la separación cerca de 10^16 es 2.
  • No compare nunca con ==. Pruebe abs(a - b) <= tolerancia, escalada al tamaño de los valores.
  • Sume muchos números del menor al mayor, o use suma compensada.
  • Para dinero, use enteros (céntimos) o un tipo decimal.

Pruebe estas herramientas

Véase también

  • Comparativa Float vs Double vs Decimal
    Los tipos numéricos de precisión simple, doble y decimal comparados: bits, dígitos de precisión, rango.
  • Glosario Número de coma flotante
    Un número de coma flotante guarda un número real como signo, exponente y fracción, como la notación científica en binario.
  • Glosario Notación científica
    La notación científica escribe un número como un coeficiente entre 1 y 10 por una potencia de diez.
  • Glosario Cifras significativas
    Las cifras significativas son los dígitos de un número que aportan información sobre su precisión.
  • Guía Cómo funcionan las bases numéricas: binario, octal y hex
    El valor posicional en binario, octal y hexadecimal, convertir 202 entre todas ellas paso a paso, colores hexadecimales.
  • Hoja de referencia Tabla de binario, octal y hex
    Del 0 al 31 en decimal, binario, octal y hex, las potencias de dos, atajos de conversión a mano y el alfabeto Base32.

Preguntas frecuentes

No. Es una aritmética exacta y determinista sobre un conjunto finito de números, y cada resultado se redondea al valor representable más cercano. Las sorpresas vienen de esperar que las fracciones decimales se guarden con exactitud.

AdSense Placeholder
Slot: footer_leaderboard