Conversão e Erro: Converta o número decimal (33.4)_{10} para a base 2 usando um computador hipotético com 8 bites, sendo 1 bit para sinal, 4 bits para a mantissa e 3 para o expoente. Qual o erro absoluto cometido? E se forem 4 bits para o expoente e 3 para a mantissa?
Passo 1
O que o enunciado pede e o que nos foi dado:
Converter o número decimal (33,4)_{10} para ponto flutuante numa máquina hipotética de 8 bits com:
Caso A: 1 bit para sinal, 4 bits para mantissa e 3 bits para expoente.
Caso B: 1 bit para sinal, 3 bits para mantissa e 4 bits para expoente.
Calcular o erro absoluto cometido em cada caso.
Informações relevantes dadas:
O número a converter é positivo, logo o bit de sinal será 0.
Para representar o valor em ponto flutuante normalizado usaremos a convenção com mantissa normalizada (dígito implícito 1.xxxx) e um expoente com bias (viés).
Não foi especificado tratamento de overflow; haverá que explicar o que acontece se o expoente necessário não couber no campo.
Passo 2
Breve aula: formato de ponto flutuante que vamos usar (didática, sem pular etapas)
Um número em ponto flutuante normalizado é escrito como
\pm 1.\text{(mantissa)} \times 2^{e},
onde e é o expoente real.
O campo de expoente armazenado (chamado E_{\text{armazenado}}) é um inteiro sem sinal de E bits. Usa-se um bias (viés) para permitir expoentes negativos:
\text{bias} = 2^{E-1}-1.
O expoente real vale
e = E_{\text{armazenado}} - \text{bias}.
A mantissa armazenada tem M bits; a mantissa “real” (o significando) é 1.\text{(bits da mantissa)}.
Valores especiais (na prática) costumam reservar o padrão com todos os bits de expoente iguais a 1 para infinito/NaN; os valores com expoente 0 são subnormais. O intervalo de expoentes normais armazenáveis é E_{\text{armazenado}} = 1,2,\dots,2^{E}-2.
Para arredondamento quando truncamos a mantissa, usamos o esquema “round to nearest” (arredonda para o mais próximo); se estiver exatamente no meio aplicaria-se tie-to-even, mas vamos ver o caso concreto.
Passo 3
Converter 33,4 para binário (passo a passo)
Parte inteira: 33_{10} = 32 + 1 = 2^{5} + 2^{0}. Logo
33_{10} = 100001_{2}.
Parte fracionária: converter 0,4 para binário por multiplicações sucessivas:
0,4 \times 2 = 0,8 \Rightarrow bit 0, resto 0,8.
0,8 \times 2 = 1,6 \Rightarrow bit 1, resto 0,6.
0,6 \times 2 = 1,2 \Rightarrow bit 1, resto 0,2.
0,2 \times 2 = 0,4 \Rightarrow bit 0, resto 0,4 (retornamos ao mesmo resto).
Portanto a parte fracionária repete com período 4:
Mas com E=3 bits o campo do expoente só pode representar valores inteiros de 0 a 2^{3}-1=7. Logo E_{\text{armazenado}}=8 não cabe: isto implica overflow do expoente.
3) Consequências práticas (explicar opções):
Em formatos reais (como IEEE) isso causa overflow: o número é maior que o máximo normal representável e normalmente resulta em +\infty (ou sinal de overflow).
Se, alternativamente, a máquina não põe infinito e apenas armazena o maior número finito representável (saturação), então devemos calcular esse maior valor finito e o erro correspondente.
Calcular o maior número finito normal representável (caso de saturação) para E=3, M=4:
O maior E_{\text{armazenado}} para normal é 2^{E}-2 = 6 (porque geralmente o padrão reserva E_{\text{armazenado}}=2^{E}-1 para \infty).
A maior mantissa (quando todos os bits da mantissa são 1) vale 1 + (1-2^{-M}) = 2 - 2^{-M}. Com M=4 isso é 2 - 2^{-4} = 2 - \tfrac{1}{16} = \tfrac{31}{16} = 1,9375.
Expoente necessário não cabe (overflow). Se a máquina produz +\infty, o erro absoluto é infinito; se a máquina saturar para o maior finito representável, o valor armazenado seria 15,5 e o erro absoluto seria 17,9.
Passo 6
Caso B: 1 bit sinal, 3 bits mantissa (M=3), 4 bits expoente (E=4)
Com E=4 bits o campo do expoente comporta 0 a 15, então 12 cabe. Em binário de 4 bits:
12_{10} = 1100_{2}.
Montar e arredondar a mantissa com M=3 bits:
A mantissa normalizada, começando após o 1., é
0000101100110\ldots
Precisamos guardar apenas M=3 bits: pegar os três primeiros bits: b_1 b_2 b_3 = 0\,0\,0.
Para decidir arredondamento, olhamos ao bit seguinte (guard bit) que é b_4 = 0. Como o guard bit é 0, o valor está mais próximo de truncar do que de arredondar para cima; portanto não arredondamos.
Logo a mantissa armazenada fica 000.
Valor representado por esses campos:
Sign bit =0.
Expoente armazenado =12 (binário 1100), portanto expoente real e = 12 - 7 = 5.
Mantissa armazenada representa 1.000_{2} = 1.
Valor representado:
V = 1.0 \times 2^{5} = 2^{5} = 32.
Erro absoluto:
\text{erro} = \bigl|33,4 - 32\bigr| = 1,4.
Resposta
Caso A (M=4, E=3): expoente necessário não cabe (overflow). Se a máquina usar +\infty, o valor representado é +\infty e o erro absoluto é infinito; se a máquina saturar para o maior finito representável, o valor armazenado seria 15,5 e o erro absoluto seria 17,9.
Caso B (M=3, E=4): valor representado 32; erro absoluto 1,4.