Página web del curso

Ejercicio

Sea el formato de 6 bits que funciona de forma similar al descrito por la norma IEEE 754. El primer bit corresponde al signo, los tres siguientes al exponente y los dos últimos a la mantisa.

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_1e_2e_3} & \mathtt{m_1m_2}\\ \hline \end{array} $$
  1. Calcular los exponentes máximo y mínimo.
  2. Determinar los números positivos normalizados representables y dibujarlos sobre la recta real. ¿Cuántos números positivos normalizados se pueden representar con este formato?
  3. Escribir todos los números desnormalizados positivos en este sistema. ¿Cuántos números positivos desnormalizados se pueden representar con este formato?
  4. Calcular el $\epsilon$ de máquina.
  5. Dibujar los errores absolutos y relativos cometidos al almacenar los números utilizando el redondeo al par más cercano y el redondeo hacia el cero.
  6. Calcular el máximo entero representable de forma exacta de forma que el siguiente entero no es reprentable de forma exacta.
  7. ¿Cómo se representaría el cero? ¿E infinito? ¿Y NaN?

Números normalizados

Exponente máximo y mínimo

Recordemos que el formato es

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_1e_2e_3} & \mathtt{1,m_1m_2}\\ \hline \end{array} $$

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

\begin{array}{cccc} \hline \mathrm{Número}\; \mathrm{binario} & \mathrm{Valor}\; \mathrm{nominal} & & \mathrm{Valor}\; \mathrm{representado}\\ \hline \mathtt{000}& 0& & R\\ \mathtt{001}& 1& & -2\\ \mathtt{010}& 2& & -1\\ \mathtt{011}& 3& sesgo & 0\\ \mathtt{100}& 4& -3 & 1\\ \mathtt{101}& 5& \longrightarrow & 2\\ \mathtt{110}& 6& & 3\\ \mathtt{111}& 7& & R\\ \hline \end{array}

Por lo tanto, en este estándar, el exponente mínimo es $\begin{array}{|c|}\hline e_{min}=-2\\ \hline\end{array}$ y el máximo es $\begin{array}{|c|}\hline e_{max}=3\\ \hline\end{array}.$

Números positivos normalizados

Recordemos que el formato es

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_1e_2e_3} & \mathtt{1,m_1m_2}\\ \hline \end{array} $$
  • Como los números son positivos, el primer bit, el del signo, es siempre cero.
  • Los tres bits siguientes son los del exponente.
  • Si el número de bits de la mantisa es $n=2$, escribimos cada exponente (del apartado anterior) con las $2^n=2^2=4$ mantisas posibles. Recordemos que el bit escondido no se almacena y es siempre 1 para los números normalizados.
\begin{array}{|lcll||} \hline \mathrm{Num (bin)} & & \mathrm{Num (dec)} & \mathrm{distancia}\\ \hline \mathtt{0\:001\:00} & 1,00\times2^{-2} & 0,25 & 2^{-4}=0,0625 \\ \mathtt{0\:001\:01} & 1,01\times2^{-2} & 0,3125 & 2^{-4}=0,0625 \\ \mathtt{0\:001\:10} & 1,10\times2^{-2} & 0,375 & 2^{-4}=0,0625 \\ \mathtt{0\:001\:11} & 1,11\times2^{-2} & 0,4375 & 2^{-4}=0,0625 \\ & & & & & & \\ \mathtt{0\:010\:00} & 1,00\times2^{-1} & 0,5 & 2^{-3}=0,125\\ \mathtt{0\:010\:01} & 1,01\times2^{-1} & 0,625 & 2^{-3}=0,125\\ \mathtt{0\:010\:10} & 1,10\times2^{-1} & 0,75 & 2^{-3}=0,125\\ \mathtt{0\:010\:11} & 1,11\times2^{-1} & 0,875 & 2^{-3}=0,125\\ & & & & & & \\ \mathtt{0\:011\:00} & 1,00\times2^{0} & 1 & 2^{-2}=0,25\\ \mathtt{0\:011\:01} & 1,01\times2^{0} & 1,25 & 2^{-2}=0,25\\ \mathtt{0\:011\:10} & 1,10\times2^{0} & 1,5 & 2^{-2}=0,25\\ \mathtt{0\:011\:11} & 1,11\times2^{0} & 1,75 & 2^{-2}=0,25\\ & & & & & & \\ \mathtt{0\:100\:00} & 1,00\times2^{1} & 2 & 2^{-1}=0,5\\ \mathtt{0\:100\:01} & 1,01\times2^{1} & 2,5 & 2^{-1}=0,5\\ \mathtt{0\:100\:10} & 1,10\times2^{1} & 3 & 2^{-1}=0,5\\ \mathtt{0\:100\:11} & 1,11\times2^{1} & 3,5 & 2^{-1}=0,5\\ & & & & & & \\ \mathtt{0\:101\:00} & 1,00\times2^{2} & 4 & 2^{0}=1\\ \mathtt{0\:101\:01} & 1,01\times2^{2} & 5 & 2^{0}=1\\ \mathtt{0\:101\:10} & 1,10\times2^{2} & 6 & 2^{0}=1\\ \mathtt{0\:101\:11} & 1,11\times2^{2} & 7 & 2^{0}=1\\ & & & & & & \\ \mathtt{0\:110\:00} & 1,00\times2^{3} & 8 & 2^{1}=2\\ \mathtt{0\:110\:01} & 1,01\times2^{3} & 10 & 2^{1}=2\\ \mathtt{0\:110\:10} & 1,10\times2^{3} & 12 & 2^{1}=2\\ \mathtt{0\:110\:11} & 1,11\times2^{3} & 14 & \\ \hline \end{array}

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

$$2^m-2=2^3-2=8-2=6\;\mathrm{exponentes}$$

Para $n = 2$ 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^2=4\;\mathrm{mantisas}$$

y en total

$$6\,\mathrm{exponentes}\times4\,\mathrm{mantisas} = \fbox{24 números normalizados positivos}$$

Si representamos estos números sobre la recta real

Vemos que:

  • El espacio entre números aumenta cuando nos desplazamos a la derecha. De hecho, cada vez que cambiamos de exponente, el espacio entre números se duplica.
  • Hay un espacio llamativo entre el número normalizado más pequeño y el cero.
  • Hemos señalado en verde el número $1$ y el siguiente número representable en este estándar.
  • El mínimo número normalizado a representar de forma exacta es $0,25$ y el máximo es $14.$

Números desnormalizados

Recordemos que el formato normalizado es

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_1e_2e_3} & \mathtt{1,m_1m_2}\\ \hline \end{array} $$

y los números desnormalizados son

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{000} & \mathtt{0,m_1m_2}\\ \hline \end{array} $$

Números desnormalizados en precisión simple

Si consideramos que el bit escondido es cero, podemos representar números menores que el mínimo número normalizado.

Estos números, en la norma IEEE 754, se representan con exponente $\mathtt{0000\,0000}$ en precisión simple y con exponente $\mathtt{0000\,0000\,000}$ en precisión doble. Pero se interpreta que el valor de su exponente es el exponente mínimo, es decir $-126$ en precisión sencilla y $-1022$ en doble precisión.

  • El inconveniente de estos números es que su precisión es menor que $24$ en precisión simple y menor que $53$ en precisión doble.
  • Y su ventaja es que aumentan el rango de números a representar rellenando el espacio entre el menor número normalizado y el cero.

Veamos un ejemplo

El número siguiente está representado en precisión simple según la norma IEEE 754.

$$ \begin{array}{|c|c|c|} \hline \texttt{signo} & {\texttt{exponente}} & {\texttt{mantisa}}\\ \hline \texttt{0} & \mathtt{0000\,0000} & \mathtt{\color{red}{000}1\,0110\,0000\,0000\,0000\,000}\\ \hline \end{array} $$

¿Cuál es su valor en base $10$?¿Cual es la precisión del número representado?

Como su exponente es $\mathtt{0000\,0000}$ y su mantisa no es cero, es un número desnormalizado:

  • Su exponente es el exponente mínimo del estándar $-126.$
  • Su bit escondido es 0.

Por lo tanto representa el número

$$ \mathtt{0,0001011}\cdot2^{-126} $$

que se corresponde con el número en base $10$

$$ (2^{-4}+2^{-6}+2^{-7})\cdot2^{-126}\approx1,0102\cdot10^{-39}. $$

Este número tiene una precisión de solo $20$ (no $24$ como corresponde a los números normalizados en precisión simple), puesto que a efectos de precisión no cuentan los tres ceros a la izquierda del primer uno de la mantisa (los tres ceros en rojo $\mathtt{\color{red}{000}}$).


Numeros desnormalizados en este estándar

Volvemos a nuestro estándar. Recordemos que el formato es

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_1e_2e_3} & \mathtt{1,m_1m_2}\\ \hline \end{array} $$

y para números desnormalizados

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{000} & \mathtt{0,m_1m_2}\\ \hline \end{array} $$

Como los números que vamos a representar son desnormalizados, su exponente es $\mathtt{000}$ y su mantisa no puede ser cero:

  • El valor del exponente es el exponente mínimo del estándar $-2.$
  • Su bit escondido es 0.

En este estandar los números desnormalizados son

\begin{array}{|cll|} \hline \mathrm{Num (bin)} & & \mathrm{Num (dec)} & \mathrm{espacio} \\ \hline \mathtt{0\:000\:01} & 0,01\times2^{-2} & 0,0625 & 2^{-4}=0,0625 \\ \mathtt{0\:000\:10} & 0,10\times2^{-2} & 0,125 & 2^{-4}=0,0625 \\ \mathtt{0\:000\:11} & 0,11\times2^{-2} & 0,1875 & \\ \hline \end{array}

Como el exponente, el signo (estamos contando solo los positivos) y el bit escondido no varían sólo hemos de tener en cuenta el número de bits de la mantisa $n=2$ y le hemos de descontar el caso donde la mantisa es todo ceros. Por lo tanto

$$2^n-1=2^2-1=\fbox{3 números desnormalizados}$$

Vemos que:

  • El espacio entre números es constante y coincide con el espacio entre números normalizados más pequeños.
  • El mínimo número desnormalizado a representar de forma exacta es $0,0625$ y el máximo es $0,1875$ que están entre el cero y el menor número normalizado.
  • La precisión es 1 para el primer número y dos para los dos siguientes (la precisión de este estándar para los números normalizados es tres, los dos bits más el uno del bit escondido).

El epsilon 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_1e_2e_3} & \mathtt{1,m_1m_2}\\ \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}{ll} \mathtt{1,00}\times2^{0} & 1 \\ \mathtt{1,01}\times2^{0} & 1,25 \end{array}

Calculamos la distancia restando estos dos valores

\begin{array}{rll} & \mathtt{1,01}\times2^{0} & 1,25\\ -&&\\[-40pt] & \mathtt{1,00}\times2^{0} & 1 \\ \hline \epsilon\rightarrow & \mathtt{0,01}\times2^{0}\rightarrow & 0,25 \end{array}

Es decir, para este estándar $$\fbox{$\epsilon=0,25$}$$

El $\epsilon$ de máquina es una cota superior del error relativo de redondeo que se comete al almacenar cualquier número en este estándar. Comprobaremos esto en el apartado siguiente.

El epsilon de máquina en precisión simple

Si aplicamos la definición para precisión sencilla, la representación de uno y el siguiente número representable de forma exacta, teniendo en cuenta que tenemos $23$ bits de mantisa más el bit escondido, es

\begin{array}{l} \mathtt{1.0000\,0000\,0000\,0000\,0000\,000}\times2^{0} \\ \mathtt{1.0000\,0000\,0000\,0000\,0000\,001}\times2^{0} \end{array}

Si restamos estos dos números

\begin{array}{rl} & \mathtt{1.0000\,0000\,0000\,0000\,0000\,001}\times2^{0}\\ -&\\[-40pt] & \mathtt{1.0000\,0000\,0000\,0000\,0000\,000}\times2^{0}\\ \hline \epsilon\rightarrow & \mathtt{0.0000\,0000\,0000\,0000\,0000\,001}\times2^{0}\rightarrow & \fbox{$2^{-23}\approx 1.19 \times 10^{-7}$} \end{array}

El epsilon de máquina en precisión doble

Si aplicamos la definición para precisión doble, la representación de uno y el siguiente número representable de forma exacta, teniendo en cuenta que tenemos $52$ bits de mantisa más el bit escondido, es

\begin{array}{l} \mathtt{1.\overbrace{0000\,0000\cdots00}^{52\,bits}}\times2^{0} \\ \mathtt{1.0000\,0000\cdots01}\times2^{0} \end{array}

Y la diferencia es

\begin{array}{rl} & \mathtt{1.\overbrace{0000\,0000\cdots01}^{52\,bits}}\times2^{0} \\ -&\\[-40pt] & \mathtt{1.0000\,0000\cdots00}\times2^{0}\\ \hline \epsilon\rightarrow & \mathtt{0.0000\,0000\cdots01}\times2^{0}\rightarrow & \fbox{$2^{-52}\approx 2.22 \times 10^{-16}$} \end{array}

Errores de redondeo

De momento, simplemente dibujaremos los errores absolutos y relativos que se comenten al almacenar números con este estándar. Hemos visto que podemos representar números entre $0$ y $14.$ Cuando queremos almacenar un número en este rango, si no coincide con alguno de los números de la tabla, lo almacenamos como un número de la tabla.

  • Si lo almacenamos como el número más próximo por debajo, cometeremos un error de truncamiento o hacia el cero (matizaremos más adelante estas denominaciones) que será la distancia del número que queremos representar al número que está por debajo más próximo.
  • El máximo error se dará justo por debajo de los números representables de forma exacta.
  • Si lo almacenamos al número más próximo, comenteremos un error de redondeo o al par más cercano que será la distancia al número más cercano.
  • El máximo error se en el punto medio entre dos números representables de forma exacta.

Podemos ver que:

  • El error absoluto crece con el número, pero el error relativo, que es el importante, no.

  • El error máximo por truncamiento es el doble del error máximo por redondeo.

  • Los todos los errores relativos son menores que $\epsilon= 0,25$ como habíamos dicho.

Máximo entero

Queremos calcular el máximo entero representable de forma exacta de forma que el siguiente entero no es representable de forma exacta.

Recordemos que el formato es

$$ \begin{array}{|c|c|c|} \hline \mathtt{signo} & \mathtt{exponente} & \mathtt{mantisa}\\ \hline \mathtt{s} & \mathtt{e_1e_2e_3} & \mathtt{1,m_1m_2}\\ \hline \end{array} $$

Si nos fijamos en los enteros representado vemos que podemos representar del $1$ al $8$ todos los enteros pero el $9$ ya no lo podemos representar de forma exacta. Por lo tanto, la respuesta a la pregunta sería "el 8".

¿Cómo podemos razonar esto de forma general? La idea es que si en un formato podemos almacenar todos los dígitos, no cometeremos error. Si tenemos que prescindir de algún dígito, es posible que haya error. Para el actual formato tenemos dos dígitos de mantisa más el bit escondido.

\begin{array}{|crc|} \hline \mathrm{entero} & \mathrm{binario} &\\ \hline 1&\mathtt{1} & \mathtt{1,00}\times2^{0} \\ 2&\mathtt{10} & \mathtt{1,00}\times2^{1} \\ 3&\mathtt{11} & \mathtt{1,10}\times2^{1} \\ 4&\mathtt{100} & \mathtt{1,00}\times2^{2} \\ 5&\mathtt{101} & \mathtt{1,01}\times2^{2} \\ 6&\mathtt{110} & \mathtt{1,10}\times2^{2} \\ 7&\mathtt{111} & \mathtt{1,11}\times2^{2} \\ 8&\mathtt{100{\color{red}0}} & \mathtt{1,00}\times2^{3} \\ \hline 9&\mathtt{100{\color{red}1}} & {\color{ForestGreen}{\mathtt{1,00}\times2^{3}}} \\ 10&\mathtt{101{\color{red}0}} & \mathtt{1.01}\times2^{3} \\ 11&\mathtt{101{\color{red}1}} & {\color{ForestGreen}{\mathtt{1,10}\times2^{3}}} \\ 12&\mathtt{110{\color{red}0}} & \mathtt{1,10}\times2^{3}\\ 13&\mathtt{110{\color{red}1}} & {\color{ForestGreen}{\mathtt{1,10}\times2^{3}}} \\ 14&\mathtt{111{\color{red}0}} & \mathtt{1,11}\times2^{3}\\ \hline \end{array}

Podemos ver que:

  • Hasta el número $7$ no hay problema porque tenemos espacio para almacenar todos los dígitos significativos.
  • Para el número $8$ nos falta espacio para almacenar el último dígito, pero como es un $\mathtt{\color{red}0}$, no se comete error.
  • El $9$ ya no se puede almacenar de forma exacta porque el dígito que no podemos almacenar es un $\mathtt{\color{red}1}$. Tendremos que redondearlo al $8$ o al $10$. Como están a la misma distancia de los dos se redondea al que en representación binaria la mantisa acabe en $\mathtt{0}.$
  • Para el $10$ el caso es parecido al $8$. No tenemos espacio para todos los dígitos, pero como el que no nos cabe es un $\mathtt{\color{red}0}$ no se comete error.
  • El $11$ no se puede almacenar de forma exacta porque el dígito que no podemos almacenar es un $\mathtt{\color{red}1}$. Tendremos que redondearlo al $10$ o al $12$. Como están a la misma distancia de los dos se redondea al que en representación binaria la mantisa acabe en $\mathtt{0}.$ En este caso hacia ${\color{ForestGreen}{1.10\times2^3}}$.
  • Y así sucesivamente.

Este valor, $8$ para este formato, nos da una idea de la capacidad de este formato para almacenar enteros de forma exacta.

Máximo entero en precisión simple.

Busquemos el máximo entero almacenado de forma exacta de forma que todos los enteros por debajo de él se almacenan de forma exacta.

Si hacemos el mismo razonamiento que en el caso anterior, teniendo en cuenta de que en este formato disponemos de $23$ bits más el bit escondido, es decir, que podemos almacenar $24$ dígitos significativos

\begin{array}{|crc|} \hline \mathrm{int} & \mathrm{bin} &\\ \hline 1&\mathtt{1} & \mathtt{1.0000\,0000\,0000\,0000\,0000\,000}\times2^{0} \\ 2&\mathtt{10} & \mathtt{1.0000\,0000\,0000\,0000\,0000\,000}\times2^{1} \\ 3&\mathtt{11} & \mathtt{1.1000\,0000\,0000\,0000\,0000\,000}\times2^{1} \\ 4&\mathtt{100} & \mathtt{1.0000\,0000\,0000\,0000\,0000\,000}\times2^{2} \\ 5&\mathtt{101} & \mathtt{1.0100\,0000\,0000\,0000\,0000\,000}\times2^{2} \\ 6&\mathtt{110} & \mathtt{1.1000\,0000\,0000\,0000\,0000\,000}\times2^{2} \\ 7&\mathtt{111} & \mathtt{1.1100\,0000\,0000\,0000\,0000\,000}\times2^{2} \\ \vdots & \vdots & \vdots \\ 16777215 &\mathtt{1\,1111\,1111\,1111\,1111\,1111\,111} & \mathtt{1.1111\,1111\,1111\,1111\,1111\,111}\times2^{23}\\ 16777216 &\mathtt{1\,0000\,0000\,0000\,0000\,0000\,000{\color{red}0}} & \mathtt{1.0000\,0000\,0000\,0000\,0000\,000}\times2^{24} \\ \hline 16777217 &\mathtt{1\,0000\,0000\,0000\,0000\,0000\,000{\color{red}1}} & {\color{ForestGreen}{\mathtt{1.0000\,0000\,0000\,0000\,0000\,000}\times2^{24}}} \\ 16777218 &\mathtt{1\,0000\,0000\,0000\,0000\,0000\,001{\color{red}0}} & \mathtt{1.0000\,0000\,0000\,0000\,0000\,001}\times2^{24} \\ 16777219 &\mathtt{1\,0000\,0000\,0000\,0000\,0000\,001{\color{red}1}} & {\color{ForestGreen}{\mathtt{1.0000\,0000\,0000\,0000\,0000\,010}\times2^{24}}}\\ 16777220 &\mathtt{1\,0000\,0000\,0000\,0000\,0000\,010{\color{red}0}} & \mathtt{1.0000\,0000\,0000\,0000\,0000\,010}\times2^{24} \\ \vdots & \vdots & \vdots \\ \hline \end{array}

Es decir, disponemos de $23$ bits más el bit escondido para almacenar dígitos. Por lo tanto, el mayor entero del que podemos almacenar todos los dígitos es

$$\mathtt{1\,\,1111\,1111\,1111\,1111\,1111\,111}$$

es decir

$$\mathtt{1\,\,\overbrace{1111\cdots111}^{23\,bits}} \quad\rightarrow\quad \mathtt{1,\,\overbrace{1111\cdots111}^{23\,bits}}\times 2^{23} $$

El número siguiente es

$$\mathtt{10\overbrace{0000\cdots00{\color{red}0}}^{23\,bits}}= \mathtt{1\overbrace{0000\cdots000}^{23\,bits}{\color{red}0}}\quad\rightarrow\quad \mathtt{1,\,\overbrace{0000\cdots000}^{23\,bits}}\times 2^{24}$$

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^{24}=16777216$}$$

El número entero siguiente es

$$\mathtt{10\overbrace{0000\cdots00{\color{red}1}}^{23\,bits}}= \mathtt{1\overbrace{0000\cdots000}^{23\,bits}{\color{red}1}}\quad\rightarrow\quad \mathtt{1,\,\overbrace{0000\cdots000}^{23\,bits}}\times 2^{24}$$

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.

Máximo entero en precisión doble

Busquemos el máximo entero almacenado de forma exacta de forma que todos los enteros por debajo de él se almacenan de forma exacta.

Hagamos el mismo razonamiento que en el caso anterior, teniendo en cuenta de que en este formato disponemos de $52$ bits más el bit escondido, es decir, que podemos almacenar $53$ dígitos significativos

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

$$\mathtt{1\,\,\overbrace{1111\cdots11}^{52\,bits}} \quad\rightarrow\quad \mathtt{1,\,\overbrace{1111\cdots11}^{52\,bits}}\times 2^{52} $$

El número siguiente es

$$\mathtt{10\overbrace{0000\cdots0{\color{red}0}}^{52\,bits}}= \mathtt{1\overbrace{0000\cdots00}^{52\,bits}{\color{red}0}}\quad\rightarrow\quad \mathtt{1,\,\overbrace{0000\cdots00}^{52\,bits}}\times 2^{53}$$

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^{53}=9007199254740992$}$$

El número entero siguiente

$$\mathtt{10\overbrace{0000\cdots0{\color{red}1}}^{52\,bits}}= \mathtt{1\overbrace{0000\cdots00}^{52\,bits}{\color{red}1}}\quad\rightarrow\quad \mathtt{1,\,\overbrace{0000\cdots00}^{52\,bits}}\times 2^{53}$$

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.

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_3} & \mathtt{1,m_1m_2}\\ \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{000} & \mathtt{00}\\ \hline -0&\mathtt{1} & \mathtt{000} & \mathtt{00}\\ \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{111} & \mathtt{00}\\ \hline -\infty&\mathtt{1} & \mathtt{111} & \mathtt{00}\\ \hline \end{array} $$

Por convenio, $\mathtt{NaN}$ (Not a Number) 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{111} & \mathtt{01}\\ \hline \end{array} $$