miércoles, 2 de agosto de 2023

Ejemplo de rango de representación en una aritmética finita de coma/punto flotante

En un sistema binario, $b=2$, si el número de dígitos es $n=2$, el conjunto de números (que no son negativos) que pueden ser representados en punto flotante con el rango $-2\le e\le 2$ es el siguiente:


Así, se obtienen las siguientes cantidades representadas:
$$\mathcal{M}=\{0,\dfrac{1}{16},\dfrac{1}{8},\dfrac{3}{16},\dfrac{1}{4},\dfrac{3}{8},\dfrac{1}{2},\dfrac{3}{4},\dfrac{1}{16},1,\dfrac{3}{2},2,3\}$$

En efecto ( aclaración ):
Para $e=-2$ se obtiene $0.00 \times 2^{-2}=0$
Para $e=-1$ se obtiene $0.00 \times 2^{-1}=0$
Para $e=0$ se obtiene $0.00 \times 2^0=0$
Para $e=1$ se obtiene $0.00 \times 2^1=0$
Para $e=-2$se obtiene $0.00 \times 2^2=0$
---
Para $e=-2$ se obtiene $\dfrac{1}{4} \times 2^{-2}=\dfrac{1}{16}$
Para $e=-1$ se obtiene $\dfrac{1}{4} \times 2^{-1}=\dfrac{1}{8}$
Para $e=0$ se obtiene $\dfrac{1}{4} \times 2^0=\dfrac{1}{4}$
Para $e=1$ se obtiene $\dfrac{1}{4} \times 2^1=\dfrac{1}{2}$
Para $e=-2$ se obtiene $\dfrac{1}{4} \times 2^2=1$
---
Para $e=-2$ se obtiene $\dfrac{1}{2} \times 2^{-2}=\dfrac{1}{8}$
Para $e=-1$ se obtiene $\dfrac{1}{2} \times 2^{-1}=\dfrac{1}{4}$
Para $e=0$ se obtiene $\dfrac{1}{2} \times 2^0=\dfrac{1}{2}$
Para $e=1$ se obtiene $\dfrac{1}{2} \times 2^1=1$
Para $e=-2$ se obtiene $\dfrac{1}{2} \times 2^2=2$
---
Para $e=-2$ se obtiene $\dfrac{3}{4} \times 2^{-2}=\dfrac{3}{16}$
Para $e=-1$ se obtiene $\dfrac{3}{4} \times 2^{-1}=\dfrac{3}{8}$
Para $e=0$ se obtiene $\dfrac{3}{4} \times 2^0=\dfrac{3}{4}$
Para $e=1$ se obtiene $\dfrac{3}{4} \times 2^1=\dfrac{3}{2}$
Para $e=-2$ se obtiene $\dfrac{3}{4} \times 2^2=3$

-oOo-
Comentarios:
En esta representación es de hacer notar que:
1. Los números representados no son equidistantes y se observa mayor densidad cerca del $0$
2. Un mismo número representado puede serlo de varias maneras distintas
3. Como el conjunto es acotado, se puede producir un desbordamiento en las operaciones aritméticas; por ejemplo, la suma de $1$ y $3$, esto es $4$, cae fuera del conjunto de valores que pueden representarse; por ejemplo, $1+3=4 \succ \text{máx}(\mathcal{M})=3$
4. El resultado obtenido de algunas operaciones aritméticas da valores que, aunque no se produzca desbordamiento ( por obtener un número mayor que el máximo de dicha representación ), no se obtiene un número del conjunto; por ejemplo $2+\dfrac{1}{8}=\dfrac{17}{8}$, que si bien es mayor que $0=\text{mín}(\mathcal{M})$ y menor que $\text{máx}(\mathcal{M})=3$, no corresponde a ninguno valor del conjunto de representación, $\mathcal{M}$

-oOo-

2'. Para que un mismo número tenga representaciones distitnas en un mismo sistema, establecemos que el primer dígito de la representación, $d_1$, sea distinto de $0$, por lo que diremos que, siendo así, un sistma de prepresentación en punto flotante está normalizada.

Actualmente, la representación que usan la mayoría de los computadores es la llamada IEEE Standard 754 en punto flotante. Está basada en los tres elementos que se ha mencionado antes: signo, mantisa y exponente. Si la base es binaria, $b=2$, el primer dígito ( dígito principal ) es, siempre, $1$, esto es, $d_1=1$, por lo que no haría falta almacenarlo en memoria ( en cuyo caso nos referiríamos a él como dígito principal implícito ).

En precisión simple, el estándard utiliza $32$ bits ( $4$ bytes ), de los cuales $8$ bits ( $1$ byte ) es para el exponente $E$; $23$ bits son para la parte fraccionaria, $F$, y $1$ bit para el signo, $S$. Cada bit almacena un $0$ o bien un $1$. Así, el valor asignado a una representación es $$(-1)^{S}\times 2^{E-127} \times \mathbb{1}.F$$ donde el sesgo de $-127$ añadido al valor positivo almacenado tiene como finalidad el poder representar tanto exponentes positivos como negativos; de este modo, un valor almacenado $E$ representa un valor real $E-127$. El bit del signo es $0$ para positivos y $1$ para negativos.

Por ejemplo:
La representación $\underset{\overbrace{\text{signo}}}{1}$     $\underset{\overbrace{\text{exponente}}}{01010011}$     $\underset{\overbrace{\text{mantisa}}} {10011110\; 00101000\; 0101000}$ es tal que:
i) El signo es $-$ por ser el bit del signo igual a $1$
ii) la mantisa es
$\mathbb{1}+\left(1\cdot 2^{-1}+1\cdot 2^{-2}+0\cdot 2^{-3}+1\cdot 2^{-4}+\ldots+1\cdot 2^{-20}+0\cdot 2^{-21}+0\cdot 2^{-22}+0\cdot 2^{-23}\right)$
—donde entre paréntesis se expresa la cantidad $F$, siendo el primer sumando a la izquierda, el primer uno, es el uno de la notación $1.F$—, que es igual a $\dfrac{2097151}{1048576}$
iii) y el exponente 0$1010011_{2}$, o lo que es lo mismo 0b$1010011$ ( en base $2$ los números suelen empezar por 0 o bien por 0b ), representa al número $83_{10}$
Por tanto, la representación estándard indicada da el valor
$$-( \dfrac{2097151}{1048576} ) \times 2^{83-127}$$ es decir $$-( \dfrac{2097151}{1048576} ) \times 2^{-44}$$

Nota: En doble precisión, se reservan $11$ bits es para el exponente $E$, donde el sesgo es ahora de $1023$.

No hay comentarios:

Publicar un comentario