Página web del curso

Ejercicio

Una máquina almacena números en punto flotante en 10 bits. El primer bit se usa para el signo del número, los cuatro siguientes para el exponente sesgado y los últimos cinco bits para la magnitud de la mantisa. Si se sigue un criterio similar al de la norma IEEE 754:

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_{1}e_{2}e_{3}e_{4}} & \mathtt{m_{1}m_{2}m_{3}m_{4}m_{5}} \\\hline \end{array}
  1. Calcular el número $\left(\mathtt{1011011010}\right)_{2}$ en base 10. $$\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{1} & \mathtt{0110} & \mathtt{11010} \\\hline \end{array}$$
  2. ¿Cual sería el $\epsilon$ de máquina expresado en base 10?
  3. ¿Cuál es el mayor entero que se puede almacenar de forma exacta de forma que el siguiente entero no se puede almacenar de forma exacta?
  4. ¿Cuales son el menor y el mayor real positivo que se almacena en forma normalizada? ¿Cómo se almacenarían en binario? ¿Qué precisión tendrían? ¿Qué separación tienen con el siguiente/anterior número almacenable?
  5. ¿Cuántos números normalizados se pueden representar con este sistema?
  6. ¿Cuales son el menor y el mayor real positivo que se almacena en forma desnormalizada?¿Cómo se almacenarían en binario?¿Qué precisión tendría cada uno? ¿Qué separación tienen con el siguiente/anterior número almacenable?
  7. ¿Cuántos números desnormalizados se pueden representar con este sistema?
  8. ¿Cuál sería la representación de $0$, $+\infty$, $-\infty$?
  9. Da un ejemplo de representación de $\mathtt{NaN}$.
  10. ¿Cuál sería la representación del número $-1,5625$ en este sistema?

Calcular el número 1011011010 en base 10.

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{1} & \mathtt{0110} & \mathtt{11010} \\\hline \end{array}

Signo

Como es $\mathtt{{\color{red}1}}$ $\longrightarrow$ signo negativo

Exponente

Tenemos $m=4$ bits para el exponente. Por lo tanto hay $2^m = 2^4 = 16$ combinaciones distinta y, en principio, podemos representar $16$ números. Como empezamos el valor nominal empieza en $0$ acabará en $15$. El primer número, $\mathtt{0000}$, y el último, $\mathtt{1111}$ se reservan. Y como la representación es sesgada, tenemos que restar el $$sesgo=2^{m-1}-1=2^{4-1}-1 =2^3-1= 8-1 = 7$$ para obtener el valor representado

\begin{array}{cccc} \hline \mathrm{Número}\; \mathrm{binario} & \mathrm{Valor}\; \mathrm{nominal} & & \mathrm{Valor}\; \mathrm{representado}\\ \hline \mathtt{0000}& 0& & R\\ \mathtt{0001}& 1& & -6\\ \mathtt{0010}& 2& & -5\\ \vdots & \vdots& sesgo & \vdots\\ \mathtt{{\color{red}{0110}}}& {\color{red}6}& -7 & {\color{red}{-1}}\\ \vdots & \vdots& \longrightarrow & \vdots\\ \mathtt{1101}& 13& & 6\\ \mathtt{1110}& 14& & 7\\ \mathtt{1111}& 15& & R\\ \hline \end{array}

El valor nominal del exponente $\mathtt{{\color{red}{0110}}}$ teniendo en cuenta la posición de cada dígito

$$ \begin{array}{cccc} \tiny{(3)}&\tiny{(2)}&\tiny{(1)}&\tiny{(0)}\\ \mathtt{0}&\mathtt{1}&\mathtt{1}&\mathtt{0} \end{array} $$

es

$$2^2+2^1=4+2=6$$

Y si tenemos en cuenta que para $m=4$ bits, $sesgo = 7$

El valor del exponente es $6-7=-1$.

Mantisa

Los dígitos almacenados de la mantisa son $\mathtt{{\color{ForestGreen}{11010}}}$ y teniendo en cuenta el bit escondido, que es uno, la mantisa es

$$\mathtt{1,{\color{ForestGreen}{11010}}}$$

que teniendo en cuenta la posición respecto a al coma

$$ \begin{array}{ccccc} \tiny{(0)}&&\tiny{(-1)}&\tiny{(-2)}&\tiny{(-3)}&\tiny{(-4)}&\tiny{(-5)}\\ \mathtt{1}&,&\mathtt{{\color{ForestGreen}1}}&\mathtt{{\color{ForestGreen}1}}&\mathtt{\color{ForestGreen}0}&\,\mathtt{{\color{ForestGreen}1}}&\mathtt{\color{ForestGreen}0} \end{array} $$

Número

Por lo tanto, si escribimos el número este es

$${\color{red}-}\mathtt{1,{\color{ForestGreen}{11010}}}\times 2^{\color{red}{-1}} \quad \longrightarrow \quad -(1+2^{-1}+2^{-2}+2^{-4})\times2^{-1} = \fbox{$-$0,90625} $$

Épsilon de máquina

Recordemos que el formato es

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_{1}e_{2}e_{3}e_{4}} & \mathtt{1,m_{1}m_{2}m_{3}m_{4}m_{5}} \\\hline \end{array}

Se define el $\epsilon$ de máquina como la distancia entre el número $1$ y es siguiente número representable de forma exacta en este estándar.

Recordemos que en este estándar el $1$ y el siguiente número son

\begin{array}{l} \mathtt{1,00000}\times2^{0} \\ \mathtt{1,00001}\times2^{0} \end{array}

Calculamos la distancia restando estos dos valores

\begin{array}{rll} & \mathtt{1,00001}\times2^{0} &\\ -&&\\[-40pt] & \mathtt{1,00000}\times2^{0} & \\ \hline \epsilon\rightarrow & 0,00001\times2^{0}\rightarrow & \fbox{$2^{-5}\times 2^0 =2^{-5}=0,03125$} \end{array}

Mayor entero

Mayor entero que se puede almacenar de forma exacta de forma que el siguiente entero no se puede almacenar de forma exacta

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_{1}e_{2}e_{3}e_{4}} & \mathtt{1,m_{1}m_{2}m_{3}m_{4}m_{5}} \\\hline \end{array}

En este formato disponemos de $5$ bits más el bit escondido, es decir, que podemos almacenar $6$ dígitos significativos.

Por lo tanto, el mayor entero del que podemos almacenar todos los dígitos es

$$\mathtt{1\,11111} \quad\rightarrow\quad \mathtt{1,\,11111}\times 2^{5} $$

El número siguiente es

$$\mathtt{10\overbrace{0000{\color{red}0}}^{5\,bits}}= \mathtt{1\overbrace{00000}^{5\,bits}{\color{red}0}}\quad\rightarrow\quad \mathtt{1,\,\overbrace{00000}^{5\,bits}}\times 2^{6}$$

del cual no podemos almacenar el cero $\mathtt{{\color{red}0}}.$ Y como es un cero no hay error. Este número es

$$\fbox{$2^{6}=64$}$$

El número entero siguiente

$$\mathtt{10\overbrace{0000{\color{red}1}}^{5\,bits}}= \mathtt{1\overbrace{00000}^{5\,bits}{\color{red}1}}\quad\rightarrow\quad \mathtt{1,\,\overbrace{00000}^{5\,bits}}\times 2^{6}$$

y no podemos almacenar el uno $\mathtt{{\color{red}1}}$ y lo tenemos que redondear al número anterior o al siguiente (en este caso al anterior) y no lo podemos representar de forma exacta.

Números normalizados

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_{1}e_{2}e_{3}e_{4}} & \mathtt{1,m_{1}m_{2}m_{3}m_{4}m_{5}} \\\hline \end{array}

Si volvemos al primer apartado, podemos ver que el exponente mínimo es $\begin{array}{|c|}\hline e_{min}=-6\\ \hline\end{array}$ y el máximo es $\begin{array}{|c|}\hline e_{max}=7\\ \hline\end{array}.$

El menor real positivo normalizado

Tendrá mantisa mínima y exponente mínimo. En este formato

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{0} & \mathtt{0001} & \mathtt{00000} \\\hline \end{array}

El exponente no puede ser $\mathtt{0000}$ porque está reservado. Para este número

$$\mathtt{1,00000}\times 2^{-6}\quad\longrightarrow\quad 2^{-6}=\fbox{0,015625}$$

Su precisión es $\fbox{$p=6$}$ porque tiene 6 dígitos, 5 que se almacenan más el bit escondido.

El siguiente número representable de forma exacta sería

$$\mathtt{1,00001}\times 2^{-6}$$

Y el espacio (diferencia) entre los dos sería

$$\mathtt{0,00001}\times 2^{-6}\quad\longrightarrow\quad 2^{-5}\times 2^{-6}=2^{-11}= \fbox{0,00048828125}$$

El mayor real positivo normalizado

Tendrá mantisa máxima y exponente máximo. En este formato

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{0} & \mathtt{1110} & \mathtt{11111} \\\hline \end{array}

El exponente no puede ser $\mathtt{1111}$ porque está reservado. Para este número

$$\mathtt{1,11111}\times 2^{7}\quad\longrightarrow\quad (1+2^{-1}+2^{-2}+2^{-3}+2^{-4}+2^{-5})\times 2^{7}=\fbox{252}$$

Su precisión es $\fbox{$p=6$}$ porque tiene 6 dígitos, 5 que se almacenan más el bit escondido.

El anterior número representable de forma exacta sería

$$\mathtt{1,11110}\times 2^{7}$$

Y el espacio (diferencia) entre los dos sería

$$\mathtt{0,00001}\times 2^{7}\quad\longrightarrow\quad 2^{-5}\times 2^{7}=2^{2}= \fbox{4}$$

¿Cuántos números normalizados?

Para $m = 4$ bits de exponente tenemos $2^m$ números distintos pero como el primero $\mathtt{0000}$ y el último $\mathtt{1111}$ están reservados tenemos

$$2^m-2=2^4-2=16-2=14\;\mathrm{exponentes}$$

Para $n = 5$ bits de mantisa tenemos $2^n$ números distintos. El bit escondido es siempre 1, así que no aporta nuevos valores y tenemos

$$2^n=2^5=32\;\mathrm{mantisas}$$

y en total

$$14\,\mathrm{exponentes}\times32\,\mathrm{mantisas} = \fbox{448 números normalizados positivos}$$

Números desnormalizados

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{0000} & \mathtt{0,m_{1}m_{2}m_{3}m_{4}m_{5}} \\\hline \end{array}

Los números desnormalizados se caracterizan porque:

  • Los dígitos del exponente son todos cero.
  • El exponente representado es el mínimo del sistema, en este caso $e_{min}=-6.$
  • El bit escondido es cero.

El menor real positivo desnormalizado

Tendrá exponente todo ceros y mantisa mínima (no vale todo ceros que respresentaría el cero)

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{0} & \mathtt{0000} & \mathtt{00001} \\\hline \end{array}

Que representa

$$\mathtt{0,00001}\times 2^{-6}\quad\longrightarrow\quad 2^{-5}\times2^{-6}=2^{-11}=\fbox{0,00048828125}$$

Su precisión es $\fbox{$p=1$}$ porque tiene 1 dígito significativo (los ceros a la izquierda no cuentan).

El siguiente número representable de forma exacta sería

$$\mathtt{0,00010}\times 2^{-6}$$

Y el espacio (diferencia) entre los dos sería

$$\mathtt{0,00001}\times 2^{-6}\quad\longrightarrow\quad 2^{-5}\times 2^{-6}=2^{-11}= \fbox{0,00048828125}$$

El mayor real positivo desnormalizado

Tendrá exponente todo ceros y mantisa máxima

\begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{0} & \mathtt{0000} & \mathtt{11111} \\\hline \end{array}

Que representa

$$\mathtt{0,11111}\times 2^{-6}\quad\longrightarrow\quad (2^{-1}+2^{-2}+2^{-3}+2^{-4}+2^{-5})\times 2^{-6}=\fbox{0,01513671875}$$

Su precisión es $\fbox{$p=5$}$ porque tiene 5 dígitos significativos.

El anterior número representable de forma exacta sería

$$\mathtt{0,11110}\times 2^{-6}$$

Y el espacio (diferencia) entre los dos sería

$$\mathtt{0,00001}\times 2^{-6}\quad\longrightarrow\quad 2^{-5}\times 2^{-6}=2^{-11}= \fbox{0,00048828125}$$

¿Cuántos números desnormalizados?

Tenemos un único exponente que es $\mathtt{0000}.$

Para $n = 5$ bits de mantisa tenemos $2^n$ números distintos. El bit escondido es siempre 0, así que no aporta nuevos valores y tenemos

Y tenemos $$2^n-1=2^5-1=32-1\;\mathrm{mantisas}$$ porque hemos de quitarle la que es todo ceros que representa el cero.

Y en total

$$1\,\mathrm{exponente}\times31\,\mathrm{mantisas} = \fbox{31 números desnormalizados positivos}$$

Valores especiales

Recordemos que el formato es

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_1e_2e_3e_4} & \mathtt{m_1m_2m_3m_4m_5}\\ \hline \end{array} $$

Por convenio, el cero se representa con todos los bits del exponente y la mantisa cero.

$$ \begin{array}{|c|c|c|c|} \hline &\mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline +0&\mathtt{0} & \mathtt{0000} & \mathtt{00000}\\ \hline -0&\mathtt{1} & \mathtt{0000} & \mathtt{00000}\\ \hline \end{array} $$

Por convenio, el infinito se representa con todos los bits del exponente 1 y todos los bits de la mantisa 0

$$ \begin{array}{|c|c|c|c|} \hline &\mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline +\infty&\mathtt{0} & \mathtt{1111} & \mathtt{00000}\\ \hline -\infty&\mathtt{1} & \mathtt{1111} & \mathtt{00000}\\ \hline \end{array} $$

Por convenio, $\mathtt{NaN}$ se representa con todos los bits del exponente 1 y los bits de la mantisa con cualquier combinación que no sean todos ceros, por ejemplo

$$ \begin{array}{|c|c|c|c|} \hline &\mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{NaN}&\mathtt{0} & \mathtt{1111} & \mathtt{01101}\\ \hline \end{array} $$

Representa -1.5625 en este sistema

Paso del sistema decimal a binario

Parte entera

La parte entera es $1$ en base $2$ y en base $10$

Parte fraccionaria

Multiplicamos por $2$, restamos la parte entera y repetimos hasta que la parte fraccionaria sea cero.

$$\begin{array}{lccccccc} 0,5625 &\times& 2 &= &1,125 &\rightarrow & 1 & \downarrow\\ 0,125 &\times& 2 &= &0,25 &\rightarrow & 0 & \downarrow\\ 0,25 &\times& 2 &= &0,5 &\rightarrow & 0 & \downarrow\\ 0,5&\times& 2& = &1,0&\rightarrow & 1& \downarrow \end{array}$$

Empezamos por el la primera parte entera y el número en binario es $\mathtt{0,1001}$

Y el número completo es

$$(1,5625)_{10} = (\mathtt{1,1001})_2$$

Normalización

  1. Movemos la coma de forma que aparezca un único dígito distinto de cero a su izquierda.
  2. Al mover la coma tenemos que multiplicar por $2^n$ siendo $n$ el número de posiciones que hemos movido la coma a la izquierda o $2^{-n}$ siendo $n$ el número de posiciones que hemos movido la coma a la derecha.
  3. Le añadimos el signo.

Este número normalizado sería

$$-\mathtt{1,1001}\times2^0$$

con

  • Signo: $-$
  • Mantisa: $\mathtt{1,1001}$
  • Exponente: $0$

Signo

Como el signo es negativo $\longrightarrow$ signo $\mathtt{1}$

Exponente

Tenemos $m=4$ bits para el exponente. Por lo tanto hay $2^m = 2^4 = 16$ combinaciones distinta y, en principio, podemos representar $16$ números. Como empezamos el valor nominal empieza en $0$ acabará en $15$. El primer número, $\mathtt{0000}$, y el último, $\mathtt{1110}$ se reservan. Y como la representación es sesgada, tenemos que restar el $sesgo=2^{m-1}-1=2^{4-1}-1 =2^3-1= 8-1 = 7$ para obtener el valor representado

El valor del exponente es $0$. Para obtener el valor nominal tenemos que sumarle el sesgo y $0+7=7$ que en binario sería

$$ \begin{array}{cccc} \hline \mathrm{Dividendo} & \mathrm{Divisor} & \mathrm{Cociente} & \mathrm{Resto}&\\ \hline 7 & 2 & 3 & 1 & \uparrow \\ 3 & 2 & 1 & 1 & \uparrow \\ 1 & 2 & 0 & 1 & \uparrow \\ \hline \end{array} $$

es decir

$$(7)_{10} = (\mathtt{111})_2$$

Y completamos con un cero a la izquierda

\begin{array}{cccc} \hline \mathrm{Número}\; \mathrm{binario} & \mathrm{Valor}\; \mathrm{nominal} & & \mathrm{Valor}\; \mathrm{representado}\\ \hline \mathtt{0000}& 0& & R\\ \mathtt{0001}& 1& & -6\\ \mathtt{0010}& 2& & -5\\ \vdots & \vdots& sesgo & \vdots\\ \mathtt{{\color{red}{0111}}}& {\color{red}7}& +7 & {\color{red}{0}}\\ \vdots & \vdots& \longleftarrow & \vdots\\ \mathtt{1101}& 13& & 6\\ \mathtt{1110}& 14& & 7\\ \mathtt{1111}& 15& & R\\ \hline \end{array}

Mantisa

La mantisa es $$\mathtt{1,{\color{ForestGreen}{1001}}}.$$ Hemos de tener en cuenta el bit escondido, que no almacenamos, y que rellenamos con ceros por la derecha hasta tener 5 bits.

Número

El número $-1,5621$ en este formato, se almacena

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo}&\mathtt{exponente}&\mathtt{mantisa}\\ \hline \mathtt{1}&\mathtt{0\color{red}{111}}&\mathtt{\color{ForestGreen}{1001}0}\\ \hline \end{array} $$