Qual valor hexadecimal melhor aproxima o número 3.462408 \mathrm{e}-11 conforme a norma IEEE 754 ?
(a) 0 \times 35 B 0 E D 02
(b) 0 \times 45 B 5 E D 12
(c) 0 \times 2 \mathrm{E} 184740

Passo 1

O enunciado pergunta qual valor hexadecimal (no formato IEEE 754 single-precision) melhor aproxima o número 3.462408\mathrm{e}{-11}. As opções dadas são:
\text{(a) }\text{0x35B0ED02}, \text{(b) }\text{0x45B5ED12}, \text{\text{(c)} }\text{0x2E184740}.
Informações relevantes que temos do enunciado (implícitas na pergunta):
  • Queremos a representação conforme a norma IEEE 754 (single precision), ou seja:
    • bit de sinal: 1 bit,
    • expoente com bias: 8 bits, bias =127,
    • mantissa (fraction) com 23 bits.
  • O número é positivo, 3.462408\mathrm{e}{-11}.

Passo 2

Identificar sinal, expoente e mantissa desejados no formato normalizado.
  • Como o número é positivo, o bit de sinal é 0.
  • Um número em IEEE 754 single é representado como
\text{valor} = (-1)^{\text{sinal}} \times (1+\text{fraction}) \times 2^{E}
onde E é o expoente real e o campo do expoente armazenado é \text{expoente}_{\text{armazenado}} = E + 127.
  • Para achar E e a fraction, é prático escrever
m = (1+\text{fraction}) = \text{valor} \times 2^{-E}.
Escolhemos E tal que 1 \le m < 2. Uma forma direta é testar potências de 2: calcular m = \text{valor}\times 2^{k} para k inteiro até que 1\le m <2.

Passo 3

Encontrar E fazendo o escalonamento por potências de 2.
  • Calculemos m = 3.462408\mathrm{e}{-11}\times 2^{35}. (Escolhemos k=35 porque 2^{35} é um número grande que provavelmente traz m para a faixa [1,2).)
  • Primeiro, 2^{35} = 34359738368.
  • Multiplicando:
m \approx 3.462408\times 10^{-11}\times 34359738368
Fazendo a conta (multiplicação cuidada), obtemos
m \approx 1,1896743300326.
  • Esse m satisfaz 1 \le m < 2, portanto o expoente real é E = -35.
  • O campo do expoente armazenado é então
\text{expoente}_{\text{armazenado}} = E + 127 = -35 + 127 = 92.

Passo 4

Converter o expoente armazenado para binário e hex.
  • 92 em binário é 01011100.
  • Em hex, esse byte é \text{0x5C}.
    Mas atenção: na montagem final do word IEEE 754 o expoente ocupa os bits 30 a 23, e a mantissa ocupa os bits 22 a 0. Iremos montar o inteiro de 32 bits como
\text{word} = (\text{sinal}\ll 31) \;|\; (\text{expoente}_{\text{armazenado}}\ll 23) \;|\; \text{mantissa}.

Passo 5

Determinar a fraction (mantissa) a partir de m.
  • Temos m \approx 1{,}1896743300326.
  • A fraction f = m-1 \approx 0{,}1896743300326.
  • Agora precisamos representar f em binário com 23 bits: isso faz-se multiplicando por 2 repetidamente e anotando a parte inteira em cada passo (algoritmo clássico de conversão de fração para binário).

Passo 6

Converter f em bits (mostrando cada passo).
Começamos com f_0 = 0{,}1896743300326.
Multiplicamos por 2 e registramos a parte inteira (0 ou 1) como o próximo bit da mantissa:
  1. 2f_0 = 0{,}3793486600652 \Rightarrow b_1 = 0, resto 0{,}3793486600652.
  2. 2\cdot0{,}37934866 = 0{,}7586973201304 \Rightarrow b_2 = 0, resto 0{,}7586973201304.
  3. 2\cdot0{,}75869732 = 1{,}5173946402608 \Rightarrow b_3 = 1, resto 0{,}5173946402608.
  4. 2\cdot0{,}51739464 = 1{,}0347892805216 \Rightarrow b_4 = 1, resto 0{,}0347892805216.
  5. 2\cdot0{,}03478928 = 0{,}0695785610432 \Rightarrow b_5 = 0.
  6. 2\cdot0{,}06957856 = 0{,}1391571220864 \Rightarrow b_6 = 0.
  7. 2\cdot0{,}13915712 = 0{,}2783142441728 \Rightarrow b_7 = 0.
  8. 2\cdot0{,}27831424 = 0{,}5566284883456 \Rightarrow b_8 = 0.
  9. 2\cdot0{,}5566284883456 = 1{,}1132569766912 \Rightarrow b_9 = 1, resto 0{,}1132569766912.
  10. 2\cdot0{,}1132569766912 = 0{,}2265139533824 \Rightarrow b_{10} = 0.
  11. 2\cdot0{,}2265139533824 = 0{,}4530279067648 \Rightarrow b_{11} = 0.
  12. 2\cdot0{,}4530279067648 = 0{,}9060558135296 \Rightarrow b_{12} = 0.
  13. 2\cdot0{,}9060558135296 = 1{,}8121116270592 \Rightarrow b_{13} = 1, resto 0{,}8121116270592.
  14. 2\cdot0{,}8121116270592 = 1{,}6242232541184 \Rightarrow b_{14} = 1, resto 0{,}6242232541184.
  15. 2\cdot0{,}6242232541184 = 1{,}2484465082368 \Rightarrow b_{15} = 1, resto 0{,}2484465082368.
  16. 2\cdot0{,}2484465082368 = 0{,}4968930164736 \Rightarrow b_{16} = 0.
  17. 2\cdot0{,}4968930164736 = 0{,}9937860329472 \Rightarrow b_{17} = 0.
  18. 2\cdot0{,}9937860329472 = 1{,}9875720658944 \Rightarrow b_{18} = 1, resto 0{,}9875720658944.
  19. 2\cdot0{,}9875720658944 = 1{,}9751441317888 \Rightarrow b_{19} = 1, resto 0{,}9751441317888.
  20. 2\cdot0{,}9751441317888 = 1{,}9502882635776 \Rightarrow b_{20} = 1, resto 0{,}9502882635776.
  21. 2\cdot0{,}9502882635776 = 1{,}9005765271552 \Rightarrow b_{21} = 1, resto 0{,}9005765271552.
  22. 2\cdot0{,}9005765271552 = 1{,}8011530543104 \Rightarrow b_{22} = 1, resto 0{,}8011530543104.
  23. 2\cdot0{,}8011530543104 = 1{,}6023061086208 \Rightarrow b_{23} = 1, resto 0{,}6023061086208.
Portanto os 23 primeiros bits da mantissa (do mais significativo para o menos) são:
b_1\ldots b_{23} = 0\,0\,1\,1\,0\,0\,0\,0\;1\,0\,0\,0\;1\,1\,1\,0\;0\,1\,1\,1\,1\,1\,1.

Passo 7

Verificar o bit de arredondamento (guard) e o sticky bit para arredondar corretamente.
  • O próximo bit (o bit 24, chamado de bit de arredondamento) foi obtido ao continuar o processo:
    • A partir do resto após b_{23}, 0{,}6023061086208\times 2 = 1{,}2046122172416, então b_{24} = 1 e o resto seguinte é 0{,}2046122172416, que é não nulo.
  • Como o bit de arredondamento b_{24}=1 e existem bits subsequentes não nulos (sticky = 1), a regra “round to nearest, ties to even” manda arredondar para cima (i.e., somar 1 à mantissa inteira de 23 bits).
  • Convertendo os 23 bits encontrados para inteiro (mantissa atual) e somando 1 pelo arredondamento:
Montagem inicial sem arredondamento (em três grupos de bits):
  • primeiros 8 bits (b1…b8): 00110000 = \text{0x30} = 48.
  • próximos 8 bits (b9…b16): 10001110 = \text{0x8E} = 142.
  • últimos 7 bits (b17…b23): 0111111 = \text{0x3F} = 63.
Calculando o inteiro da mantissa:
\text{mantissa} = 48\cdot 2^{15} + 142\cdot 2^{7} + 63 = 1\,591\,103.
Arredondando (somando 1) dá
\text{mantissa\_rounded} = 1\,591\,104.

Passo 8

Montar o inteiro de 32 bits final e converter para hexadecimal.
  • O campo do expoente armazenado é 92. Em operação inteira:
\text{word} = (0\ll 31) \;|\; (92\ll 23) \;|\; 1\,591\,104.
  • Calcule 92\ll 23 = 92\times 2^{23} = 771\,751\,936.
  • Somando a mantissa: 771\,751\,936 + 1\,591\,104 = 773\,343\,040.
  • Agora convertemos esse inteiro 773\,343\,040 para 4 bytes (hex):
    • Byte mais significativo = 46 decimal = \text{0x2E}.
    • Próximo byte = 24 decimal = \text{0x18}.
    • Próximo byte = 71 decimal = \text{0x47}.
    • Byte menos significativo = 64 decimal = \text{0x40}.
  • Assim o word em hex, no formato usual, é
\text{0x2E184740}.

Passo 9

Checar coerência com as opções:
  • A opção (c) é exatamente \text{0x2E184740}, que é a representação IEEE 754 single-precision mais próxima do número pedido.
  • As outras opções (a) e (b) são diferentes e representam valores muito distintos (por exemplo, expoentes armazenados diferentes).

Resposta

\text{0x2E184740}

Exercícios relacionados