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} $$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
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}.$
Recordemos que el formato es
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:
Recordemos que el formato normalizado es
y los números desnormalizados son
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.
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:
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}}$).
Volvemos a nuestro estándar. Recordemos que el formato es
y para números desnormalizados
Como los números que vamos a representar son desnormalizados, su exponente es $\mathtt{000}$ y su mantisa no puede ser cero:
En este estandar los números desnormalizados son
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:
Recordemos que el formato es
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
Calculamos la distancia restando estos dos valores
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.
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
Si restamos estos dos números
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
Y la diferencia es
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.
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.
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
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.
Podemos ver que:
Este valor, $8$ para este formato, nos da una idea de la capacidad de este formato para almacenar enteros de forma exacta.
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
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.
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.
Recordemos que el formato es
Por convenio, el cero se representa con todos los bits del exponente y la mantisa cero.
Por convenio, el infinito se representa con todos los bits del exponente 1 y todos los bits de la mantisa 0
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