Las unidades de procesamiento de un ordenador emplean varios tipos de números. Uno de ellos son los enteros, otros los de coma flotante. En este artículo comentaré a cerca de los segundos, ya que son algo más desconocidos que los primeros. Así aprenderás todo lo que tienes que saber sobre este tipo de números, para qué se usan, formatos, etc.
Índice de contenidos
¿Qué es el coma flotante?
Coma flotante, también conocida como punto flotante, es un formato utilizado para representar números reales en sistemas informáticos. Los números reales son aquellos que incluyen una parte entera y una fraccionaria, como 3.14 o -0.75.
En un número en coma flotante, la representación se divide en tres partes:
Base: en un número con exponente, se trata del número en sí al que se le aplica el exponente.
Signo: es un bit que indica si el número es positivo o negativo. Uno para indicar negativo y cero para indicar positivo.
Exponente: se compone de un conjunto de bits que representa el exponente al cual se debe elevar una base para obtener el valor real del número. El exponente permite representar números muy grandes o muy pequeños utilizando una cantidad fija de bits.
Mantisa: también llamada fracción o significando, es una representación binaria de la parte significativa del número. La mantisa contiene los dígitos binarios que representan la parte fraccionaria del número real.
El formato de coma flotante se basa en la notación científica, donde un número se representa como el producto de una mantisa y una potencia de base 2 elevada al exponente.
Por otro lado, es importante también conocer otra terminología que te resultará importante para comprender mejor qué es un número de coma flotante:
Longitud: la longitud de los datos se refiere a la cantidad de bits necesaria para su representación. Si tenemos una longitud de 4-bit, entonces tendremos representaciones que van desde 0000 a 1111, y si es de 8-bit sería del 00000000 al 11111111 que es el equivalente en decimal a representar desde 0 a 255 (256 valores posibles).
Precisión: no siempre se puede representar un número en coma flotante totalmente preciso, a veces es necesario redondear en algún decimal. Por eso podemos hablar de precisiones, según el formato binario que tenga, y que permitirá más o menos precisión del valor:
Precisión media: también conocido como «half-precision float» o FP16, es un formato de coma flotante que utiliza 16 bits para representar un número real. Este formato se utiliza en algunos sistemas y lenguajes de programación, y se caracteriza por tener una menor precisión y un rango más limitado en comparación con los formatos de precisión simple y doble.
Precisión simple: o «single-precision float» (FP32), es el formato más comúnmente utilizado para representar números reales en coma flotante. Utiliza 32 bits en total, divididos en 1 bit para el signo, 8 bits para el exponente y 23 bits para la mantisa. Este formato ofrece una precisión moderada y un rango amplio, y es compatible con el estándar IEEE 754.
Precisión: se refiere a qué tan preciso es un valor del coma flotante, ya que no siempre se puede expresar con exactitud y habrá que redondearlo en algún decimal. Hay que decir, que cuando se manejan datos de coma flotante podemos tener:
Precisión doble: en inglés «double-precision float» o FP64, es un formato de coma flotante que utiliza 64 bits para representar un número real. Al igual que el formato de precisión simple, utiliza 1 bit para el signo, 11 bits para el exponente y 52 bits para la mantisa. Este formato ofrece una mayor precisión y un rango mucho más amplio que el formato de precisión simple.
Otros: existen otros tipos de precisión, como los FP8, los FP128, etc. En el caso de los 128-bit, se denomina de precisión cuádruple.
Overflow o desbordamiento: en coma flotante sucede cuando se intenta almacenar un número mayor del que se puede representar o almacenar en la longitud que se esté usando, por lo que no todos los bits serán almacenados y se producirá un error.
Estándar IEEE 754
El estándar IEEE 754 es una especificación ampliamente utilizada para la representación y manipulación de números en coma flotante en sistemas informáticos. Este estándar define formatos y reglas para la representación binaria de números reales, así como para realizar operaciones aritméticas y otras operaciones relacionadas.
Fue creado en 1985 por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE). El estándar abordó muchos problemas encontrados en las diversas implementaciones de coma flotante que dificultaban su uso de forma fiable.
El estándar IEEE 754 establece principalmente dos formatos para la representación de números en coma flotante: precisión simple (32 bits) y precisión doble (64 bits). Aquí te explico cómo se representan los números en estos formatos:
Precisión simple (32 bits): sigue la siguiente fórmula: (-1)^signo * (1.mantisa) * 2^(exponente – sesgo).
1 bit para el signo: Indica si el número es positivo (0) o negativo (1).
8 bits para el exponente: Representa el exponente con un sesgo de 127. Esto permite representar un rango de exponentes desde -126 hasta 127.
23 bits para la mantisa: Representa la fracción significativa del número en formato binario con una precisión de 23 bits.
Precisión doble (64 bits): sigue la siguiente fórmula: (-1)^signo * (1.mantisa) * 2^(exponente – sesgo).
1 bit para el signo: Indica si el número es positivo (0) o negativo (1).
11 bits para el exponente: Representa el exponente con un sesgo de 1023. Esto permite representar un rango de exponentes desde -1022 hasta 1023.
52 bits para la mantisa: Representa la fracción significativa del número en formato binario con una precisión de 52 bits.
Valores especiales
El estándar IEEE 754 también define reglas para manejar valores especiales, como:
Cero: en la representación de números en coma flotante se indica con un exponente y una mantisa de 0. Sin embargo, es importante destacar que existen dos representaciones distintas para el cero: -0 y +0, aunque ambos valores son considerados iguales.
Desnormalizado: cuando el exponente en la representación de un número en coma flotante es todo ceros, pero la mantisa no lo es, entonces ese número se considera desnormalizado. Esto significa que no se asume un número inicial antes del punto binario en este caso.
Infinito: tanto positivo como negativo, se representan mediante un exponente en el que todos los bits son 1 y una mantisa compuesta completamente de ceros. El bit de signo distingue entre infinito positivo e infinito negativo. En el estándar IEEE 754, las operaciones con valores infinitos están definidas de manera específica.
No es un número (NAN): Not-a-Number se utiliza para representar un valor que no es válido o es un error. Se representa cuando el campo del exponente está compuesto por todos unos, con un bit de signo igual a cero, o cuando la mantisa no es una secuencia de unos seguida de ceros. El NAN es un valor especial que se puede utilizar para denotar una variable que aún no tiene un valor asignado en la programación.
EXPONENTE
mantisa
VALOR
0
0
exacto 0
255
0
Infinidad
0
no 0
desnormalizado
255
no 0
No es un número (NAN)
Operaciones especiales: resultados
Cuando se opera con estos valores especiales, también hay que considerar que tendrán resultados especiales que te muestro en la siguiente tabla:
Operación
Resultado
n ÷ ±Infinito
0
±Infinito × ±Infinito
±Infinito
±distinto de cero ÷ ±0
±Infinito
±finito × ±Infinito
±Infinito
Infinito + Infinito Infinito – -Infinito
+Infinito
-Infinito – Infinito -Infinito + – Infinito
-Infinito
±0 ÷ ±0
NaN
±Infinito ÷ ±Infinito
NaN
±Infinito × 0
Nan
NaN == NaN
False
Velocidad entero vs coma flotante
Es posible que te estés preguntando si es mejor tener un procesador con un rendimiento superior en operaciones enteras o en operaciones en coma flotante. Esta solía ser una pregunta común en el pasado, aunque ahora ha pasado a un segundo plano, sigue siendo interesante. El rendimiento del software dependerá de esta elección.
En general, muchas aplicaciones convencionales utilizan de manera más intensiva operaciones con números enteros. Sin embargo, en aplicaciones como software científico, videojuegos, multimedia, etc., es donde cobra mayor importancia el uso de números en coma flotante. Por lo tanto, dependerá del software que utilices con más frecuencia.
Actualmente, contamos con la unidad de medida FLOPS para describir el rendimiento de una máquina en términos de cálculos en coma flotante por segundo que puede realizar. Sin embargo, esta unidad es más relevante en la supercomputación o en entornos de computación de alto rendimiento (HPC) que en el ámbito de la computación doméstica.
Además, es importante tener en cuenta que las instrucciones que trabajan con números enteros suelen procesarse más rápidamente, mientras que las operaciones en coma flotante pueden requerir más ciclos de reloj para completarse. Por esta razón, no es tan sencillo comparar directamente la cantidad de instrucciones por ciclo en operaciones enteras y en coma flotante.