Saltar al contenido
Inicio

Coma flotante (punto flotante): definición y representación en binario

Coma flotante (punto flotante): explicación clara y ejemplos sobre definición y representación en binario, formatos IEEE y precisión para entender cómo los ordenadores almacenan números reales.

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).


 

Galería de imágenes

6 Imágenes

¿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.

Resumen

En matemáticas y ciencias, los números muy grandes y muy pequeños se simplifican a menudo y se multiplican por una potencia de diez para hacerlos más fáciles de entender. Por ejemplo, puede ser mucho más fácil leer 1,2 billones como {\displaystyle 1.2\times 10^{12}} que 1.200.000.000.000. Esto también se puede utilizar con potencias negativas de diez para hacer números pequeños, lo que significa que se puede representar 0,000001 como 1 × {\displaystyle 1\times 10^{-6}}. Este proceso se denomina notación científica.

Dado que los ordenadores están limitados a los números enteros y binarios, esto significa que no pueden representar fácilmente los números decimales fraccionarios. Para representar los números fraccionarios, los ordenadores utilizan tres conjuntos de números binarios para hacer una representación en notación científica. Son: el bit con signo, que determina si el número es positivo (0) o negativo (1); el significante, que es una versión entera del número; y el exponente, que es la potencia por la que se multiplica la base.

Significado y

El significante se encuentra tomando su número y moviendo el punto radial hasta que no haya parte fraccionaria, convirtiéndolo en un entero. En decimal esto es convertir 1,45 en 145 moviendo el punto a la derecha 2 pasos, y en binario esto sería convertir 1101,0111 (13,4375) en 1101 0111 (215) moviendo el punto a la derecha 4 pasos; en ambos casos estos números no están relacionados entre sí fuera de usar los mismos dígitos en un ordenamiento similar.

De forma similar a como la notación científica hace que el significante sea lo más básico posible, el objetivo en los números de punto flotante es hacer que sea un número entero para que pueda ser representado en bytes y utilizado en los cálculos.

Exponente

El exponente es el número de dígitos por los que se ha movido el punto radial: si se mueve hacia la izquierda, el exponente es negativo, pero si se mueve hacia la derecha, es positivo. Como en el caso anterior, para convertir 1,45 en 145 hay que multiplicar por 100, por lo que el exponente es 2, ya que {\displaystyle 100=10^{2}}. Igualmente, convertir 1101,0111 (13,4375) en 1101 0111 (215) requiere mover el punto del radicando cuatro columnas a la derecha, por lo que el exponente es 4; esto puede verificarse en decimal como {\displaystyle 215\div 13.4375=16(2^{4})} .

Dado que el proceso es inverso al de la mayoría de los casos de notación científica, ya que implica convertir una fracción en un número entero en lugar de convertir un número entero grande en una fracción, los exponentes suelen ser negativos para desplazar el decimal hacia la izquierda; en decimal esto sería volver a convertir su número entero 145 en el número fraccionario 1,45 multiplicándolo por {\displaystyle 10^{-2}}. En lugar de utilizar un bit con signo a la izquierda, el exponente está sesgado, lo que da a los exponentes flotantes de 32 bits un rango de {\displaystyle 2^{-126}} a {\displaystyle 2^{127}}. El valor de salida del exponente sesgado puede encontrarse sumándole 127:

{\displaystyle b^{5}=132(5+127)=10000100}

{\displaystyle b^{-5}=122(-5+127)=01111010}

{\displaystyle b^{0}=127(0+127)=01111111}



 

Ejemplo

Decimal a Bicimal

Supongamos, por ejemplo, que queremos representar el número decimal 37,40625 a su contrapartida binaria: un bicimal (o decimal/fracción binaria). En primer lugar, tenemos que tomar nuestro número decimal, que está en potencias de 10, y convertirlo en binario, que está en potencias de 2. Una forma de hacerlo es restar la mayor potencia de dos posible hasta llegar a cero:

{\displaystyle 37.40625-\mathbf {32} (2^{5})=5.40625}

{\displaystyle 5.40625-\mathbf {4} (2^{2})=1.40625}

{\displaystyle 1.40625-\mathbf {1} (2^{0})=0.40625}

{\displaystyle 0.40625-\mathbf {0.25} (2^{-2})=0.15625}

{\displaystyle 0.15625-\mathbf {0.125} (2^{-3})=0.03125}

{\displaystyle 0.03125-\mathbf {0.03125} (2^{-5})=0}

Utilizando las potencias de dos anteriores, podemos representar nuestro número decimal {\displaystyle 37.40625} como sigue:

Poder:

{\displaystyle 2^{5}}

{\displaystyle 2^{4}}

{\displaystyle 2^{3}}

{\displaystyle 2^{2}}

{\displaystyle 2^{1}}

{\displaystyle 2^{0}}

-

{\displaystyle 2^{-1}}

{\displaystyle 2^{-2}}

{\displaystyle 2^{-3}}

{\displaystyle 2^{-4}}

{\displaystyle 2^{-5}}

Valor:

1

0

0

1

0

1

-

0

1

1

0

1

Bicimal para flotar

Hemos validado que nuestro número decimal {\displaystyle 37.40625} se representa en binario como {\displaystyle 100101.01101} . Sin embargo, el problema de los ordenadores es que representan los números como potencias enteras de dos mediante bits, lo que complica los números fraccionarios y negativos. De acuerdo con la norma IEEE-754, la forma en que se suele hacer con un ordenador es crear un número de 32 bits en coma flotante que consta de tres partes: el signo, 1 bit para determinar si nuestro número es positivo o negativo; el exponente, 8 bits para representar nuestro exponente y al que añadimos 127 para evitar los bytes con signo; y nuestro significante, que es nuestro número binario sin punto bicálico repartido en 23 bits. Como tenemos que mover nuestro punto bicíclico 5 lugares para hacer {\displaystyle 100100.01101} en el significando {\displaystyle 10010001101} nuestro exponente es {\displaystyle 132(5+127)} . Utilizando un flotador de 32 bits podemos representar 37,40625 así:

Tipo:

±

Exponente

Significado y

Valor:

0

1

0

0

0

0

1

0

0

0

0

1

0

1

0

1

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

Significado:

+

{\displaystyle 2^{7}+2^{2}=132}

{\displaystyle 2^{20}+2^{18}+2^{16}+2^{15}+2^{13}=1,417,216}



 

Páginas relacionadas

 

Preguntas y respuestas

P: ¿Qué son los números reales?

R: Los números reales son cualquier número que pueda expresarse como decimal, incluidas las fracciones y los números irracionales.

P: ¿Cómo almacenan los ordenadores los números binarios?

R: Los ordenadores almacenan los números binarios como enteros binarios, que son números enteros que son potencias de dos.

P: ¿Existe una forma directa de que los ordenadores representen números no enteros como los decimales?

R: No, no hay una forma directa de que los ordenadores representen números no enteros como decimales porque no hay punto radix.

P: ¿Cuál es el propósito de la representación en coma flotante?

R: La representación en coma flotante permite a los ordenadores eludir el problema de no tener un punto de radix al permitir que el punto de radix se mueva más alto o más bajo cuando se multiplica por un exponente (potencia).

P: ¿A qué se refiere el término "flotante" en la representación en coma flotante?

R: El término "flotante" se refiere a cómo el punto radix puede moverse más alto o más bajo cuando se multiplica por un exponente (potencia).

P: ¿Cómo se calcula un exponente (potencia)?

R: Un exponente (potencia) se calcula multiplicando un número base por sí mismo un determinado número de veces. Por ejemplo, 2^3 = 8 porque 2 x 2 x 2 = 8.

Artículos relacionados

Autor

AlegsaOnline.com Coma flotante (punto flotante): definición y representación en binario

URL: https://es.alegsaonline.com/art/35146

Compartir