Coma flotante | sistema binario

Sistema binario

Un valor real se puede extender con una cantidad arbitraria de dígitos. La coma flotante permite representar solo una cantidad limitada de dígitos de un número real, solo se trabajará con los dígitos más significativos, (los de mayor peso) del número real, de tal manera que un número real generalmente no se podrá representar con total precisión sino como una aproximación que dependerá de la cantidad de dígitos significativos que tenga la representación en coma flotante con que se está trabajando. La limitación se halla cuando existen dígitos de peso menor al de los dígitos de la parte significativa. En dicho caso estos suelen ser redondeados, y si son muy pequeños son truncados. Sin embargo, y según el uso, la relevancia de esos datos puede ser despreciable, razón por la cual el método es interesante pese a ser una potencial fuente de error.

En la representación binaria de coma flotante, el bit de mayor peso define el valor del signo, 0 para positivo, 1 para negativo. Le siguen una serie de bits que definen el exponente. El resto de bits son la parte significativa.

Debido a que la parte significativa está generalmente normalizada, en estos casos, el bit más significativo de la parte significativa siempre es 1, así que no se representa cuando se almacena sino que es asumido implícitamente. Para poder realizar los cálculos ese bit implícito se hace explícito antes de operar con el número en coma flotante. Hay otros casos donde el bit más significativo no es un 1, como con la representación del número cero, o cuando el número es muy pequeño en magnitud y rebasa la capacidad del exponente, en cuyo caso los dígitos significativos se representan de una manera denormalizada para así no perder la precisión de un solo golpe sino progresivamente. En estos casos, el bit más significativo es cero y el número va perdiendo precisión poco a poco (mientras que al realizar cálculos este se haga más pequeño en magnitud) hasta que al final se convierte en cero.

Ejemplo

Emplearemos varios ejemplos para describir la notación de coma flotante. Abajo tenemos 3 números en una representación de coma flotante de 16 bits. El bit de la izquierda es el signo, luego hay 6 bits para el exponente, seguidos de 9 bits para la parte significativa:

Signo

El signo es expresado por el bit de la izquierda, con 0 indicando que el número es positivo y 1 indicando que el número es negativo. En los ejemplos de arriba, el primer número es negativo y los dos últimos son positivos.

Exponente

El exponente indica cuánto se debe desplazar hacia la derecha o hacia la izquierda la coma binaria de la parte significativa. En este caso, el exponente ocupa 6 bits capaces de representar 64 valores diferentes, es decir, es un exponente binario (de base 2) que va desde -31 a +32, representando potencias de 2 entre 2-31 y 2+32, indicando que la coma binaria se puede desplazar hasta 31 dígitos binarios hacia la izquierda (un número muy cercano a cero), y hasta 32 dígitos binarios hacia la derecha (un número muy grande).

Pero el exponente no se almacena como un número binario con signo (desde -31 hasta +32) sino como un entero positivo equivalente que va entre 0 y 63. Para ello, al exponente se le debe sumar un desplazamiento (bias), que en este caso de exponente de 6 bits (64 valores), es 31 (31 es la mitad de los 64 valores que se pueden representar, menos 1), y al final, el rango del exponente de -31 a +32 queda representado internamente como un número entre 0 y 63, donde los números entre 31 y 63 representan los exponentes entre 0 y 32, y los números entre 0 y 30 representan los exponentes entre -31 y -1 respectivamente:

-31              0               32 <-- Exponente binario real
 +-------+-------+-------+-------+
 0               31              63 <-- Representación en coma flotante
                                        del exponente de 6 bits
                                        (Es el exponente binario más un bits de 31)

Parte significativa

La parte significativa, en este caso, está formada por 10 dígitos binarios significativos, de los cuales tenemos 9 dígitos explícitos más 1 implícito que no se almacena.

Esta parte significativa generalmente está normalizada y tendrá siempre un 1 como el bit más significativo. Debido a que, salvo ciertas excepciones, el bit más significativo del significante siempre es 1, para ahorrar espacio y para aumentar la precisión en un bit, este bit no se almacena, y por ello se denomina bit oculto o implícito, sin embargo, antes de realizar los cálculos este bit implícito debe convertirse en un bit explícito.

Números reales representados

La notación genérica para la coma flotante descrita arriba, representa respectivamente los siguientes números reales (expresados en binario). El color rojo indica el bit más significativo, que cuando se almacena es implícito (ver arriba la parte significativa en la representación de coma flotante), pero cuando se hacen los cálculos, o cuando se muestra la información se vuelve explícito:

(La coma se desplaza 4 posiciones binarias (bits) a la derecha)
(La coma se desplaza 4 posiciones binarias a la izquierda)
(La coma se desplaza 10 posiciones binarias a la derecha)
(con todos los valores expresados en representación binaria)

Comparación con la coma fija

Para un tamaño determinado de bytes, la notación en coma flotante puede ser más lenta de procesar y es menos precisa que la notación en coma fija, ya que además de almacenar el número (parte significativa), también debe almacenarse el exponente, pero permite un mayor rango en los números que se pueden representar.

Coprocesador numérico y bibliotecas de coma flotante

Debido a que las operaciones aritméticas que se realizan con números en coma flotante son complejas de realizar, muchos sistemas destinan un procesador especial para la realización específica de este tipo de operaciones, denominado unidad de coma flotante o tienen incorporados componentes especializados. En los casos donde no exista esta facilidad, o que el hardware de coma flotante no pueda realizar determinadas operaciones, se utilizan bibliotecas de software para realizar los cálculos.