viernes, 8 de octubre de 2021

Representación IEEE Standard 754 en punto flotante

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$ (representando números enteros no negativos que varían entre $0$ y $255$, esto es, los que se pueden codificar en base $2$ con $8$ bits); $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$$

Se utiliza un sesgo de $127$ aplicado al valor del exponente almacenado $E$, dando lugar al exponente verdadero $E-127$, lo cual tiene como finalidad el poder representar tanto exponentes positivos como negativos; de este modo, un valor almacenado $E$ representa el valor verdadero $E-127$.

Como ya hemos visto que $E$ varía entre $0$ y $255$, entonces $E-127$ toma valores en el conjunto de $2^8=256$ elementos: $\{-127,-126,\ldots,0,1,2,\ldots,128\}$, y , por tanto, $2^{E-127}$ varía entre $2^{-127}\approx 10^{-38}$ y $2^{128}\approx 10^{38}$.

El ordinal de cada término de la sucesión $-127,-126,\ldots,0,1,2,\ldots,128$ (empezando a contar desde $0$) se denomina característica. El valor de la característica varía pues de $0$ (para el valor del primer término $-127$) a $255$ (para el valor del último término $128$), y representa el valor del exponente almacenado $E$.

Designando por $n$ al número de bits del campo del exponente (en nuestro caso $n:=8$), esta característica es igual, por tanto, al valor del exponente verdadero $E-127$ más lo que viene a denominarse desplazamiento y que es fácil ver que es igual a $2^{n-1}-1$. Así por ejemplo, si el exponente verdadero es $E-127:=100$, entonces el valor de la característica es $100+2^{8-1}-1=100+128-1=227$; y (otro ejemplo), como seria de esperar si $E-127:=-127$, entonces sus característica es igual a $-127+2^{8-1}-1=-127+128-1=0$; y si $E-127:=-128$, entonces su característica es igual a $128+2^{8-1}-1=128+128-1=255$, que es el último término de la sucesión que hemos comentado.



Por otra parte, El bit del signo es $0$ para positivos y $1$ para negativos.

Ejemplo 1.
Consideremos la representación de un cierto número (veremos cuál es al final) en el estándar IEEE 754 de simple precisión (32 bits) $$\underset{\overbrace{1\; \text{bit para el signo}}}{1}\quad \underset{\overbrace{8\; \text{bits para el exponente}}}{01010011} \quad\underset{\overbrace{23\; \text{bits para la mantisa}}} {10011110\; 00101000\; 0101000}$$ es tal que:

i) El signo es negativo por ser el valor del bit $S$ igual a $1$, y, por tanto, $(-1)^S=(-1)^1=-1$

ii) la mantisa $1.F$ es

1+$(1\cdot 2^{-1}+0\cdot 2^{-2}+0\cdot 2^{-3}+1\cdot 2^{-4}+\overset{\underbrace{23}}{\ldots}+0\cdot 2^{-22}+0\cdot 2^{-23})$
donde a partir del segundo sumando se expresa la cantidad $F$, siendo el primer sumando a la izquierda, el primer uno, que viene de la notación $1.F$, luego la mantisa corresponde al número $$\dfrac{2097151}{1048576}$$

iii) El exponente verdadero de la potencia $2^{E-127}$ es igual a 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— corresponde a $83_{10}-127=-44$
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} \approx -0.1136868\times 10^{-12}$$ pues con $23$ bits de mantisa el número de dígitos/cifras significativas correctas que podemos asegurar es de $7$


-oOo-



Nota: En doble precisión, se reservan $11$ bits es para representar el exponente $E$, donde el sesgo es ahora de $2^{11-1}-1=2^{10}-1=1023$.
-oOo-
Referencias:
  [1] Moreno, C.: Introducción al Cálculo Numérico, UNED, Madrid, 2011
  [2] García Valle, J.L.: Matemáticas especiales para computación, McGraw-Hill, Madrid, 1988

No hay comentarios:

Publicar un comentario