Mostrando entradas con la etiqueta representación en punto flotante. Mostrar todas las entradas
Mostrando entradas con la etiqueta representación en punto flotante. Mostrar todas las entradas

miércoles, 2 de agosto de 2023

Ejemplo de desbordamiento en una representación finita en coma flotante

ENUNCIADO. En un sistema binario ( $b=2$ ), con un número fijo de dígitos, $n=3$, el conjunto de números ( que no son negativos ) que pueden ser representados de este modo, son
Representación: 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 
Valor real:       0 |   1 |   2 |   3 |   4 |   5 |   6 |   7
Un aspecto relevante de este sistema de representación es que puede producirse un desbordamiento en las operaciones aritméticas debido a que el conjunto es acotado. Por ejemplo, la suma de 3 y 5 produce un número que no puede ser representado en este sistema. $\square$

Aclaración:

$0=0\cdot 2^{0}+0\cdot 2^{1}+0\cdot 2^{2}$
$1=1\cdot 2^{0}+0\cdot 2^{1}+0\cdot 2^{2}$
$2=0\cdot 2^{0}+1\cdot 2^{1}+0\cdot 2^{2}$
$3=1\cdot 1^{0}+1\cdot 2^{1}+0\cdot 2^{2}$
$4=0\cdot 2^{0}+0\cdot 2^{1}+1\cdot 2^{2}$
etcétera

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$.

Ejemplos de comportamientos en representación finita de coma flotante

ENUNCIADO. Sea $x \succ 0$ un número que se representa exacto en una aritmética finita de punto flotante. Analícese el comportamiento del cociente $$\dfrac{\sin\,(x+h)-\sin\,x}{h}$$ cuando se consideran valores de $h$ próximos a $0$ y los cálculos se realizan en una aritmética de punto flotante.

SOLUCIÓN. Para valores de $h$ suficientemente pequeños tenemos que $\mathcal{R}(x+h)=x$, por lo que el numerador de la expresión se anula, habida cuenta de que $\sin(x+h)\approx \sin\,x$ si $h \ll 1$, mientras que el denominador no lo hace. En consecuencia, el valor del cociente se anula. $\square$

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