Articles

Números de Coma Flotante

Por qué se necesitan números de coma flotante

Dado que la memoria de la computadora es limitada, no puede almacenar números con precisión infinita, sin importar si usa fracciones binarias o decimales: en algún momento tiene que cortar. Pero, ¿cuánta precisión se necesita? ¿Y dónde se necesita? ¿Cuántos dígitos enteros y cuántos dígitos de fracciones?

  • Para un ingeniero que construye una carretera, no importa si son 10 metros o 10.0001 metros de ancho – sus medidas probablemente no son tan precisas en primer lugar.
  • Para alguien que diseña un microchip, 0,0001 metros (una décima de milímetro) es una gran diferencia, pero nunca tendrá que lidiar con una distancia mayor de 0,1 metros.
  • Un físico necesita usar la velocidad de la luz (aproximadamente 300000000) y la constante gravitacional de Newton (aproximadamente 0,0000000000667) en el mismo cálculo.

Para satisfacer al ingeniero y al diseñador de chips, un formato numérico debe proporcionar precisión para números de magnitudes muy diferentes. Sin embargo, solo se necesita una precisión relativa. Para satisfacer al físico, debe ser posible hacer cálculos que involucren números con diferentes magnitudes.

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

Cómo funcionan los números de coma flotante

La idea es componer un número de dos partes principales:

  • Un significado que contiene los dígitos del número. Los significantes negativos representan números negativos.
  • Un exponente que dice dónde se coloca el punto decimal (o binario) en relación con el comienzo del significando. Los exponentes negativos representan números que son muy pequeños (es decir, cercanos a cero).

Este formato satisface todos los requisitos:

  • Puede representar números con magnitudes muy diferentes (limitado por la longitud del exponente)
  • Proporciona la misma precisión relativa en todas las magnitudes (limitado por la longitud del significante)
  • Permite cálculos a través de magnitudes: multiplicar un número muy grande y un número muy pequeño preserva la precisión de ambos en el resultado.

Los números decimales de coma flotante generalmente toman la forma de notación científica con un punto explicitante siempre entre los dígitos 1 y 2. El exponente se escribe explícitamente incluyendo la base, o se usa una e para separarlo del significando.

El estándar

Casi todos los lenguajes de programación y hardware utilizan números de coma flotante en los mismos formatos binarios, que se definen en el estándar IEEE 754. Los formatos habituales son de 32 o 64 bits de longitud total:

Format Total bits Significand bits Exponent bits Smallest number Largest number
Single precision 32 23 + 1 sign 8 ca. 1.2 ⋅ 10-38 ca. 3.4 ⋅ 1038
Double precision 64 52 + 1 sign 11 ca. 2.2 ⋅ 10-308 ca. 1.8 ⋅ 10308

Tenga en cuenta que hay algunas peculiaridades:

  • La secuencia de bits real es el bit de signo primero, seguido del exponente y finalmente los bits significativos.
  • El exponente no tiene un signo; en su lugar, se le resta un sesgo de exponente (127 para una precisión simple y 1023 para una precisión doble). Esto, junto con la secuencia de bits, permite comparar y ordenar correctamente los números de coma flotante, incluso cuando se interpretan como enteros.
  • El dígito más significativo del significante se omite y se asume que es 1, excepto para los números subnormales que están marcados por un exponente todo-0 y permiten un rango de números más allá de los números más pequeños dados en la tabla anterior, a costa de la precisión.
  • Hay valores cero positivos y negativos separados, que difieren en el bit de signo, donde todos los demás bits son 0. Estos deben considerarse iguales aunque sus patrones de bits sean diferentes.
  • Hay valores de infinito positivos y negativos especiales, donde el exponente es todo 1 bits y el significando es todo 0 bits. Estos son los resultados de cálculos donde se excede el rango positivo del exponente, o división de un número regular por cero.
  • Hay valores especiales de no un número (o NaN) donde el exponente es todo de 1 bits y el significando no es todo de 0 bits. Estos representan el resultado de varios cálculos indefinidos (como multiplicar 0 e infinito, cualquier cálculo que involucre un valor NaN o casos específicos de aplicación). Los valores NAN idénticos a bits no deben considerarse iguales.

Si esto parece demasiado abstracto y desea ver cómo se ven algunos valores específicos en IEE 754, pruebe el Juguete Flotante, o la visualización IEEE 754, o Flotador expuesto.