(30 Pontos) Considere uma máquina cuja representação de números é dada por um sistema de ponto flutuante F(2,8,-10,10), isto é, base binária, 8 dígitos na mantissa e expoente no intervalo [-10,10].
(a) Represente os números x_{1}=9.3125, x_{2}=16.38 e x_{3}=1027.5 nessa máquina.
(b) Os números x_{1}, x_{2} e x_{3} podem ser representados exatamente no sistema?
Justifique sua resposta para cada número.

Passo 1

O que o enunciado pede: representar os números \;x_{1}=9{,}3125, \;x_{2}=16{,}38 e \;x_{3}=1027{,}5 na máquina de ponto flutuante \;F(2,8,-10,10) e dizer se cada um é representável exatamente nessa máquina, justificando.
Informações dadas e presumidas (tudo que vamos usar): \n
  • A base é binária: \beta=2. \n
  • A mantissa tem t=8 dígitos: na forma normalizada a mantissa tem exatamente 8 dígitos binários com o primeiro dígito não nulo; em binário isso significa que o primeiro dígito é \;1. Assim escrevemos um número normalizado como \;d_1.d_2d_3\ldots d_8\times2^{e} com \;d_1=1. Em notação mais direta usamos \;1.b_1b_2\ldots b_7\times2^{e} (o primeiro dígito é o \;1 e temos então 7 bits fracionários efetivos). \n
  • O expoente e deve estar no intervalo inteiro [-10,10]. \n
  • O enunciado não fixa modo de arredondamento; vou usar o modo usual “arredondar para o mais próximo” (round to nearest, ties to even) ao reduzir a expansão binária ao limite de 8 dígitos de mantissa. Vou explicitar os bits de guarda/sticky quando necessário. \n

Passo 2

Breve aula: como representar um número real em \;F(2,8,-10,10). \n
  • Primeiro escrevo o número em binário com ponto binário. \n
  • Depois normalizo para a forma \;1.b_1b_2\ldots b_7\times2^{e}. Aqui b_1,\dots,b_7 são os 7 bits fracionários que cabem (total 8 dígitos contando o \;1 inicial). \n
  • Se a expansão binária tiver mais de 7 bits fracionários, usamos arredondamento: olhamos o bit seguinte (guard) e os bits além dele (sticky). Regra simplificada que vou usar: se guard = 0 ⇒ não incrementa; se guard = 1 e os bits seguintes não são todos zero ⇒ incrementa a mantissa; se exatamente tie (guard=1 e sticky=0) aplicamos tie-to-even (não vou ter muitos ties exatos neste exercício, mas é a regra padrão). \n
  • Se o expoente necessário ficar fora de [-10,10] o número não pode ser representado (overflow/underflow), mas aqui trabalharemos com expoentes pequenos. \n

Passo 3

Representação de \;x_{1}=9{,}3125. \n
  1. Converter para binário: parte inteira 9 em binário é \;1001_2. A parte fracionária 0{,}3125 converte assim: \n
    \;0{,}3125\cdot2=0{,}625 → bit 0. \n
    \;0{,}625\cdot2=1{,}25 → bit 1 (resto 0{,}25). \n
    \;0{,}25\cdot2=0{,}5 → bit 0. \n
    \;0{,}5\cdot2=1{,}0 → bit 1 (resto 0). \n
    Logo a parte fracionária é exatamente \;0{,}0101_2. \n
  2. Então \;9{,}3125 = 1001{,}0101_2. \n
  3. Normalizo: mover o ponto 3 casas à esquerda para obter leading 1: \n
9{,}3125 = 1{,}0010101_2 \times 2^{3}.
  1. A mantissa normalizada tem a forma \;1.b_1\ldots b_7. Aqui, após o ponto temos exatamente 7 bits: \;0010101. Não sobrou nenhum bit além desses, portanto não há necessidade de arredondamento. \n
  2. Conclusão para \;x_{1}: representação na máquina é \;1{,}0010101\times2^{3} e é EXATAMENTE representável (não houve truncamento nem arredondamento).

Passo 4

Representação de \;x_{2}=16{,}38. \n
  1. Note que \;16=2^{4}, então ao normalizar teremos expoente e=4 e precisamos representar a mantissa \;16{,}38/2^{4}=1{,}02375. \n
  2. Precisamos converter a parte fracionária \;0{,}02375 para binário, obtendo os primeiros bits suficientes para decidir o arredondamento (pelo menos 7 bits fracionários + bit de guarda e alguns além para sticky). Faço multiplicações sucessivas: \n
    \;0{,}02375\cdot2=0{,}0475 → bit 0. \n
    \;0{,}0475\cdot2=0{,}095 → bit 0. \n
    \;0{,}095\cdot2=0{,}19 → bit 0. \n
    \;0{,}19\cdot2=0{,}38 → bit 0. \n
    \;0{,}38\cdot2=0{,}76 → bit 0. \n
    \;0{,}76\cdot2=1{,}52 → bit 1 (resto 0{,}52). \n
    \;0{,}52\cdot2=1{,}04 → bit 1 (resto 0{,}04). \n
    Próximo: \;0{,}04\cdot2=0{,}08 → bit 0 (este é o bit de guarda, se precisarmos). \n
  3. Assim os primeiros bits fracionários de 1{,}02375 (após o 1 inicial) são \;0000011 (7 bits) e o bit seguinte (guard) é \;0. Havia bits diferentes de zero depois do guard (sticky) porque vimos posteriormente que aparecem mais 1s em posições posteriores ao guard (a expansão não termina em zeros), então sticky = 1. \n
  4. Aplicando a regra de arredondamento para o mais próximo: como o bit de guarda é \;0, não incrementamos a mantissa; ficamos com \;1{,}0000011\times2^{4}. \n
  5. Conclusão para \;x_{2}: a representação na máquina (arredondada para nearest) é \;1{,}0000011\times2^{4}. Como a expansão binária da parte decimal de \;16{,}38 é infinita (não é uma fração com denominador potência de 2), \;x_{2} NÃO é representável exatamente — houve arredondamento.

Passo 5

Representação de \;x_{3}=1027{,}5. \n
  1. Converter a parte inteira: 1027 = 1024+3 = 2^{10}+3. Em binário \;1027 = 10000000011_2. A parte fracionária 0{,}5 é .1_2. Então \;1027{,}5 = 10000000011{,}1_2. \n
  2. Normalizo: mover o ponto 10 casas para a esquerda para obter leading 1: \n
1027{,}5 = 1{,}00000000111_2 \times 2^{10},
onde depois do ponto temos a sequência de bits \;00000000111 (essa sequência tem 11 bits após o 1: oito zeros, depois 1,1,1). \n
3) Precisamos guardar só 7 bits fracionários. Os primeiros 7 bits após o 1 são todos zeros: \;0000000. O bit seguinte (guard) é também 0. Porém existem bits não nulos depois do guard (sticky = 1), porque mais à frente há três uns. Pela regra de arredondamento, guard = 0 implica que não incrementamos a mantissa. \n
4) Assim a mantissa na máquina fica \;1{,}0000000 e o expoente é 10. A representação da máquina é \;1{,}0000000\times2^{10}. \n
5) Note que esse número vale exatamente \;2^{10}=1024 em decimal. Portanto a máquina armazena 1027{,}5 como 1024 (erro absoluto =3{,}5). Além disso, o expoente 10 está justamente no limite superior permitido mas ainda dentro do intervalo, logo não houve overflow; houve, sim, perda de precisão por arredondamento. \n
6) Conclusão para \;x_{3}: representação na máquina \;1{,}0000000\times2^{10} e \;x_{3} NÃO é representável exatamente.

Resposta

x_{1}: \;1{,}0010101\times2^{3} — representável exatamente (Sim). \n
x_{2}: \;1{,}0000011\times2^{4} — não representável exatamente (Não; foi arredondado). \n
x_{3}: \;1{,}0000000\times2^{10} — não representável exatamente (Não; máquina armazena 1024).

Exercícios relacionados