El formato en coma usado habitualmente es el formato IEEE 754. IEEE significa Institute of Electrical and Electronics Engineers. Este estándar es el usado actualmente por casi todos los procesadores.
La primera norma IEEE 754 se publicó en el 1985 e incluía únicamente la representación de números en binario. Sus formatos básicos eran simple y doble precisión. En el 2008 se publicó una segunda versión donde se incluía también la representación de números en decimal con dos formatos básicos y se añadía un formato básico binario con precisión cuádruple. En el 2019 se publicó una tercera versión con modificaciones menores.
Los cinco formatos básicos y sus parámetros más importantes son
El formato por defecto en Computación Numérica es actualmente el binario en doble precisión. Vamos a estudiar en más detalle los formatos binarios en simple y doble precisión.
Sea el número decimal $314,15$. Para normalizarlo
El número anterior, normalizado sería
$$+3,1415\times10^2$$cuyos elementos son
Además tenemos que la base es $10$.
Sea el número binario $10101,11001$. Para normalizarlo aplicaríamos los mismos pasos que en el caso anterior pero teniendo en cuenta que la base ahora es 2 y por lo tanto, este número normalizado sería
$$+1,010111001\times2^4$$con
Además tenemos que la base es $2$.
El exponente en esta norma será siempre un número entero con representación sesgada. Veamos cómo funciona con un ejemplo. Supongamos que tenemos $m = 4$ bits donde podemos almacenar 4 dígitos binarios. Podríamos almacenar $2^m = 2^4 = 16$ combinaciones diferentes con las que podríamos representar los siguientes números
$$ \begin{array}{ccccc} \hline \mathrm{Representación} & \mathrm{Valor} & &\mathrm{Enteros}\\ \mathrm{binaria} & \mathrm{nominal} & &\mathrm{con}\; \mathrm{signo}\; \mathrm{(Expo.)}\\ (m=4\; bits)& & & sesgo=2^{m-1}-1 \\ \hline \mathtt{0000} & 0 & & Reservado\\ \mathtt{0001} & 1 & & -6\\ \mathtt{0010} & 2 & & -5\\ \mathtt{0011} & 3 & & -4\\ \mathtt{0100} & 4 & & -3\\ \mathtt{0101} & 5 & & -2\\ \mathtt{0110} & 6 & sesgo & -1\\ \mathtt{0111} & 7 & \longrightarrow & 0\\ \mathtt{1000} & 8 & -7 & 1\\ \mathtt{1001} & 9 & & 2\\ \mathtt{1010} & 10& & 3\\ \mathtt{1011} & 11& & 4\\ \mathtt{1100} & 12& & 5\\ \mathtt{1101} & 13& & 6\\ \mathtt{1110} & 14& & 7\\ \mathtt{1111} & 15& & Reservado\\ \hline \end{array} $$
Utiliza 32 bits (4 bytes) distribuídos:
Se utiliza un $\mathtt{0}$ si el signo es positivo y un $\mathtt{1}$ si el signo es negativo.
Tenemos $m=8$ bits para el exponente. Por lo tanto hay $2^m = 2^8 = 256$ combinaciones distinta y, en principio, podemos representar $256$ números. Como empezamos el valor nominal empieza en $0$ acabará en $255$. El primer número, $\mathtt{0000\,0000}$, y el último, $\mathtt{1111\,1111}$ se reservan (ya veremos luego para qué). Y como la representación es sesgada, tenemos que restar el
para obtener el valor representado
Por lo tanto el exponente mínimo representado es $e_{min} = -126$ y el máximo $e_{max} = 127.$
En binario, en la representación normalizada, el dígito a la izquierda de la coma es siempre $\mathtt{1}$, no se representa y se llama el bit escondido. Por lo tanto, aunque tenemos $23$ dígitos binarios para almacenar estamos usando uno más y la precisión es $24.$
Utiliza 64 bits (8 bytes) distribuídos:
Se utiliza un $\mathtt{0}$ si el signo es positivo y un $\mathtt{1}$ si el signo es negativo.
Tenemos $m=11$ bits para el exponente. Por lo tanto hay $2^m = 2^{11} = 2048$ combinaciones distinta y, en principio, podemos representar $2048$ números. Como empezamos el valor nominal empieza en $0$ acabará en $2047$. El primer número, $\mathtt{0000\,0000\,000}$, y el último, $\mathtt{1111\,1111\,111}$ se reservan. Y como la representación es sesgada, tenemos que restar el
para obtener el valor representado
Por lo tanto el exponente mínimo representado es $e_{min} = -1022$ y el máximo $e_{max} = 1023.$
En binario, en la representación normalizada, el dígito a la izquierda de la coma es siempre $\mathtt{1}$, no se representa y se llama el bit escondido. Por lo tanto, aunque tenemos $52$ dígitos binarios para almacenar estamos usando uno más y la precisión es $53.$
Si el número
$$ \begin{array}{|c|c|c|} \hline \mathrm{Signo} & \mathrm{Exponente} & \mathrm{Mantisa}\\ 1\,\mathrm{bit} & 8\,\mathrm{bits} & 23\,\mathrm{bits} \\ \hline \mathtt{1}&\mathtt{1000\,1101}&\mathtt{0110\,1000\,0000\,0000\,0000\,000}\\ \hline \end{array} $$sigue la norma IEEE 754 para representación en punto flotante con precisión simple, calcular su representación en base 10.
Como es $\mathtt{{\color{red}1}}$ $\longrightarrow$ signo negativo
El valor nominal del exponente $\mathtt{{\color{red}{1000\,1101}}}$ teniendo en cuenta la posición de cada dígito
$$ \begin{array}{ccccccc} \tiny{(7)}&\tiny{(6)}&\tiny{(5)}&\tiny{(4)}& \,\tiny{(3)}&\tiny{(2)}&\tiny{(1)}&\tiny{(0)}& & \\ \mathtt{1}&\mathtt{0}&\mathtt{0}&\mathtt{0}&\,\mathtt{1}&\mathtt{1}&\mathtt{0}&\mathtt{1} \end{array} $$es
$$2^7+2^3+2^2+2^0=128+8+4+1=141$$Y si tenemos en cuenta que para $m=8$ bits, $sesgo = 2^{m-1}-1 = 2^{8-1}-1=2^7-1=128-1=127$
El valor del exponente es $141-127=14$.
$$ \begin{array}{cccc} \hline \mathrm{Número}\; \mathrm{binario} & \mathrm{Valor}\; \mathrm{nominal} & & \mathrm{Valor}\; \mathrm{representado}\\ \hline \mathtt{0000\,0000}& 0& & R\\ \mathtt{0000\,0001}& 1& & -126\\ \mathtt{0000\,0010}& 2& & -125\\ \mathtt{0000\,0011}& 3& & -124\\ \cdots & \cdots & -127 & \cdots\\ \cdots & \cdots & \longrightarrow & \cdots\\ \mathtt{{\color{red}{1000\,1101}}}& {\color{red}{141}}& & {\color{red}{14}}\\ \cdots & \cdots & & \cdots\\ \cdots & \cdots & & \cdots\\ \mathtt{1111\,1100}& 252 & & 125 \\ \mathtt{1111\,1101}& 253 & & 126 \\ \mathtt{1111\,1110}& 254 & & 127 \\ \mathtt{1111\,1111}& 255 & & R\\ \hline \end{array} $$Los dígitos almacenados de la mantisa son $\mathtt{{\color{ForestGreen}{0110\,1000\,0000\,0000\,0000\,000}}}$ y teniendo en cuenta el bit escondido, que es uno, la mantisa es
$$\mathtt{1,{\color{ForestGreen}{0110\,1000\,0000\,0000\,0000\,000}}}$$o también
$$\mathtt{1,{\color{ForestGreen}{0110\,1}}}$$$$ \begin{array}{ccccccc} \tiny{(0)}&&\tiny{(-1)}&\tiny{(-2)}&\tiny{(-3)}&\tiny{(-4)}&\tiny{(-5)}\\ \mathtt{1}&,&\mathtt{{\color{ForestGreen}0}}&\mathtt{{\color{ForestGreen}1}}&\mathtt{\color{ForestGreen}1}&\,\mathtt{{\color{ForestGreen}0}}&\mathtt{\color{ForestGreen}1} \end{array} $$Por lo tanto, si escribimos el número este es
$${\color{red}-}\mathtt{1,{\color{ForestGreen}{0110\,1}}}\times 2^{\color{red}{14}} \quad \longrightarrow \quad -(1+2^{-2}+2^{-3}+2^{-5})\times2^{14} = \fbox{$-$23040} $$