(3.5) - Parte dos computadores utilizados para a resolução de problemas de Engenharia utilizam uma linguagem binária considerando uma cadeia de 64 bits. Sendo você um candidato a futuro engenheiro, mostre que você entende a linguagem usada pelo computador escrevendo o nümero decimal \boldsymbol{x}=-122,221 numa representação em ponto flutuante na base 2 .
a) (0.50) - Normalize o número e represente-o em notação de ponto flutuante na base 2;
b) (0.50) - Calcule o expoente polarizado em precisão simples e o converta para base binária;
c) (2.00) - Converta a mantissa para a base binária usando um número suficiente de algarismos de forma que o erro relativo real seja menor que 0,01 .
d) (0.50) - Desenhe o Diagrama do número armazenado no computador.

Passo 1

O enunciado pede que o número decimal -122,221 seja escrito em ponto flutuante na base 2. As perguntas são:
  • (a) Normalizar o número e representá‑lo em notação de ponto flutuante na base 2.
  • (b) Calcular o expoente polarizado (biased) em precisão simples (IEEE 754 single) e escrevê‑lo em binário.
  • (c) Converter a mantissa para base 2 usando um número suficiente de algarismos de forma que o erro relativo real seja menor que 0,01.
  • (d) Desenhar o diagrama do número armazenado no computador (campos sign/exponent/mantissa).
Informações relevantes dadas e convenções que vou usar:
  • O número a converter é -122,221.
  • Para a parte (b) “precisão simples” significa IEEE 754 single: 1 bit de sinal, 8 bits de expoente com bias 127, e 23 bits de fração (mantissa sem o bit implícito).
  • Vou usar a forma normalizada em base 2: \pm 1.\text{(frac)} \times 2^{e}.
  • Método para a parte fracionária: multiplicar repetidamente a parte fracionária por 2 e registrar a parte inteira (0 ou 1) a cada passo.

Passo 2

Converter a parte inteira \,122 para binário (divisões por 2, explicando passo a passo):
  • 122 \div 2 = 61 resto 0.
  • 61 \div 2 = 30 resto 1.
  • 30 \div 2 = 15 resto 0.
  • 15 \div 2 = 7 resto 1.
  • 7 \div 2 = 3 resto 1.
  • 3 \div 2 = 1 resto 1.
  • 1 \div 2 = 0 resto 1.
Lendo os restos de baixo para cima: 122_{10} = 1111010_{2}. Ou seja, a parte inteira em binário é \,1111010_{2}.
Converter a parte fracionária \,0,221 para binário pelo método de multiplicação por 2 (vou mostrar os primeiros bits, suficientes para as próximas etapas):
Definindo f_0=0,221 e para k\ge1 f_k = 2 f_{k-1}, o bit b_k é \lfloor f_k\rfloor e o novo resto é f_k - b_k.
Fazendo as multiplicações:
  • 2\cdot0,221 = 0,442 \Rightarrow b_1=0,\; r_1=0,442
  • 2\cdot0,442 = 0,884 \Rightarrow b_2=0,\; r_2=0,884
  • 2\cdot0,884 = 1,768 \Rightarrow b_3=1,\; r_3=0,768
  • 2\cdot0,768 = 1,536 \Rightarrow b_4=1,\; r_4=0,536
  • 2\cdot0,536 = 1,072 \Rightarrow b_5=1,\; r_5=0,072
  • 2\cdot0,072 = 0,144 \Rightarrow b_6=0,\; r_6=0,144
  • 2\cdot0,144 = 0,288 \Rightarrow b_7=0,\; r_7=0,288
  • 2\cdot0,288 = 0,576 \Rightarrow b_8=0,\; r_8=0,576
  • 2\cdot0,576 = 1,152 \Rightarrow b_9=1,\; r_9=0,152
  • 2\cdot0,152 = 0,304 \Rightarrow b_{10}=0,\; r_{10}=0,304
  • 2\cdot0,304 = 0,608 \Rightarrow b_{11}=0,\; r_{11}=0,608
  • 2\cdot0,608 = 1,216 \Rightarrow b_{12}=1,\; r_{12}=0,216
  • 2\cdot0,216 = 0,432 \Rightarrow b_{13}=0,\; r_{13}=0,432
  • 2\cdot0,432 = 0,864 \Rightarrow b_{14}=0,\; r_{14}=0,864
  • 2\cdot0,864 = 1,728 \Rightarrow b_{15}=1,\; r_{15}=0,728
  • 2\cdot0,728 = 1,456 \Rightarrow b_{16}=1,\; r_{16}=0,456
  • 2\cdot0,456 = 0,912 \Rightarrow b_{17}=0,\; r_{17}=0,912
  • 2\cdot0,912 = 1,824 \Rightarrow b_{18}=1,\; r_{18}=0,824
  • 2\cdot0,824 = 1,648 \Rightarrow b_{19}=1,\; r_{19}=0,648
  • 2\cdot0,648 = 1,296 \Rightarrow b_{20}=1,\; r_{20}=0,296
    (segue indefinidamente, a expansão binária da fração decimal geralmente não é finita)
Assim os primeiros bits da parte fracionária binária são
0,221_{10} \approx 0,00\,1110\,0010\,01\ldots_2,
ou seja a sequência de bits (b_1,b_2,b_3,\dots) = (0,0,1,1,1,0,0,0,1,0,0,1,\ldots).

Passo 3

Normalizar o número (resposta da parte (a)):
A representação binária completa até juntar parte inteira e parte fracionária é
-122,221_{10} = -\bigl(1111010.\,b_1 b_2 b_3\ldots\bigr)_2.
Para normalizar em forma \pm 1.\text{(frac)}\times 2^{e} desloca‑se o ponto binário 6 casas para a esquerda (porque o bit mais significativo de 1111010_2 é 2^{6}):
Logo a forma normalizada é
-122,221_{10} = -1.\,111010\,b_1 b_2 b_3\ldots \times 2^{6}.
Vou explicitar alguns dígitos depois da vírgula binária (usando os bits calculados no passo anterior):
-122,221_{10} \approx -1.\,11101000111000100100\ldots \times 2^{6}.
Isto responde (a): a mantissa normalizada começa com 1.111010001110\ldots e o expoente é e=6.

Passo 4

Calcular o expoente polarizado em precisão simples (resposta da parte (b)):
  • Para precisão simples (IEEE 754 single) o bias (polarização) é 127.
  • O expoente verdadeiro é e=6.
  • O expoente polarizado é E = e + \text{bias} = 6 + 127 = 133.
Agora converter 133 para binário com 8 bits:
  • 133_{10} = 128 + 4 + 1 = 2^{7} + 2^{2} + 2^{0}.
  • Em binário de 8 bits: 133_{10} = 10000101_{2}.
Portanto o campo expoente (8 bits) será \;10000101.

Passo 5

Converter a mantissa e assegurar erro relativo menor que 0,01 (resposta da parte (c)):
  1. Determinar quantos bits são necessários para que o erro relativo seja <0,01.
  • Se a mantissa normalizada for 1.f_1 f_2 f_3\ldots e truncarmos/arreondarmos após n bits fracionários, o erro relativo máximo aproximado (para números na faixa [1,2)) é da ordem de 2^{-n} (mais precisamente menor que 2^{-n}).
  • Queremos 2^{-n} < 0,01. Tomando logaritmo em base 2:
n > \log_{2}\!\left(\frac{1}{0,01}\right) = \log_{2}(100) \approx 6,643.
  • Logo o menor inteiro n que satisfaz é n=7. Portanto com 7 bits de fração após o ponto binário a representação já dá erro relativo menor que 1\%.
  1. Mostrar a mantissa truncada/arreondada com n=7 bits e calcular o erro relativo real (para confirmar numericamente):
  • Do passo 3, os primeiros bits da mantissa após o 1. são (usando a concatenação dos bits da parte inteira e da parte fracionária): 1110100\ldots (os seis primeiros vêm dos bits da parte inteira, o sétimo vem do primeiro bit da antiga fração decimal).
  • Assim a mantissa aproximada com 7 bits é
1.\underbrace{1110100}_{7\text{ bits}}_{2} = 1 + \tfrac{1}{2} + \tfrac{1}{4} + \tfrac{1}{8} + 0\cdot\tfrac{1}{16} + \tfrac{1}{32} + 0\cdot\tfrac{1}{64}.
Calcule isso em decimal:
1,1110100_{2} = 1 + 0,5 + 0,25 + 0,125 + 0 + 0,03125 + 0 = 1,90625_{10}.
  • O valor verdadeiro do fator normalizado é \dfrac{|x|}{2^{6}}=\dfrac{122,221}{64} = 1,909703125_{10} (isto dá exatamente porque 122,221 = 122221/1000 e 122221/64000 = 1,909703125).
  • A diferença absoluta é 1,909703125 - 1,90625 = 0,003453125.
  • O erro relativo é
\frac{0,003453125}{1,909703125} \approx 0{,}001807 \approx 0{,}18\%,
que é significativamente menor que 1\%. Portanto 7 bits são suficientes (e de fato muito seguros).
  1. Mantissa em precisão simples (campo de 23 bits):
  • Para armazenar em single precision precisamos dos 23 bits de fração (lembrando que o 1 inicial não é armazenado).
  • Tomando os primeiros 23 bits fracionários conforme computados no passo 2 (os 6 bits que vêm da parte inteira depois do primeiro 1, seguidos pelos bits da fração decimal) obtemos a sequência (antes de arredondar o último bit):
\text{frac (antes do rounding)} = 11101000111000100100110\quad(23\\ \text{bits}).
  • O próximo bit (o 24º) é 1 (veio da continuação da expansão binária), logo para arredondamento para o mais próximo devemos somar 1 no bit menos significativo. Somando 1 ao último bit (que é 0) produz sem carry um 1 final.
  • Assim a mantissa (campo de 23 bits) arredondada fica
\text{frac (23 bits, arredondada)} = 11101000111000100100111.
Isto significa que, em single precision, a mantissa armazenada (os 23 bits) será \;11101000111000100100111.

Passo 6

Montagem final e diagrama do número armazenado (resposta da parte (d)):
  • Bit de sinal: como o número é negativo, \text{sign}=1.
  • Expoente (8 bits, bias 127): \;10000101 (porque 133_{10}=10000101_2).
  • Mantissa (23 bits, arredondada conforme passo anterior): \;11101000111000100100111.
O diagrama (campo a campo) da palavra IEEE 754 single de 32 bits é, em ordem:
  • Sign (1 bit): \;1
  • Exponent (8 bits): \;10000101
  • Fraction/Mantissa (23 bits): \;11101000111000100100111
Escrito junto (32 bits):
1\;10000101\;11101000111000100100111.
Isto completa o diagrama do número armazenado em precisão simples (32 bits).

Resposta

(a) -122,221_{10} = -1.\,11101000111000100100\ldots_2 \times 2^{6}
(b) Expoente polarizado: E=133. Em binário (8 bits): 10000101
(c) Mantissa com precisão suficiente para erro relativo <0,01: com n=7 bits após o ponto: 1.1110100_{2} (erro relativo \approx 0,001807 < 0,01).
Mantissa para IEEE 754 single (23 bits, arredondada): 11101000111000100100111
(d) Diagrama (IEEE 754 single, 32 bits):
Sign = 1
Exponent = 10000101
Fraction = 11101000111000100100111

Exercícios relacionados