Um computador armazena números reais utilizando 1 bit para o sinal do número, 7 bits para o expoente e 8 bits para a mantissa. Admitindo que haja truncamento, como ficariam armazenados os seguintes números decimais? (Utilize o enunciado para responder às questões de 5 a 10).
Qual é o maior e o menor número positivo nele representável?

Passo 1

O enunciado dá as seguintes informações que vou usar:
  • 1 bit para o sinal;
  • 7 bits para o expoente;
  • 8 bits para a mantissa;
  • adota-se truncamento quando necessário.
A pergunta que preciso responder é: qual é o maior e qual é o menor número positivo representável nesse formato de ponto flutuante?

Passo 2

Primeiro preciso lembrar como se interpreta um formato binário de ponto flutuante (vou explicar devagarinho para você poder reproduzir isso na prova):
  • O campo de expoente tem k=7 bits. O bias (viés) é dado por
\text{bias} = 2^{\,k-1}-1.
Substituindo k=7 temos
\text{bias} = 2^{6}-1 = 63.
  • Os valores do campo de expoente (chamo de E) têm três tipos de significado:
    • E=0 reserva-se para zero e números subnormais (denormalizados);
    • 1\le E \le 2^{k}-2 são expoentes normais;
    • E=2^{k}-1 (todos 1) é reservado para infinito e NaN.
      Com k=7, isso dá E normal variando de 1 até 126, e E=127 reservado.
  • A mantissa tem p=8 bits. Para números normais existe o bit implícito (leading 1): o significando (mantissa com o 1 implícito) vale
1.f = 1 + \sum_{i=1}^{8} b_i 2^{-i},
onde os b_is são os bits da fração. Para subnormais o 1 implícito não existe, então o significando é 0.f.
  • Fórmulas de valor:
    • Para número normal (com E\ge1):
    \text{valor} = (-1)^s\,(1.f)\,2^{E-\text{bias}}.
    • Para número subnormal (com E=0 e fração f>0):
    \text{valor} = (-1)^s\,(0.f)\,2^{1-\text{bias}}.

Passo 3

Vou calcular o maior número positivo finito possível (ou seja, sinal s=0, expoente máximo normal E_{\max} e mantissa toda 1) e o menor número positivo não nulo (isto é, menor subnormal).
Começo pelo maior.
  • O maior expoente normal é E_{\max}=2^{7}-2=126. O expoente efetivo é
E_{\max}-\text{bias}=126-63=63.
  • A fração máxima (todos os p=8 bits iguais a 1) é
f_{\max}=\sum_{i=1}^{8}2^{-i}=\frac{2^{8}-1}{2^{8}}=\frac{255}{256}.
Logo o significando máximo é
1.f_{\max}=1+\frac{255}{256}=\frac{511}{256}=2-\frac{1}{2^{8}}.
  • Portanto o maior valor positivo finito é
\begin{aligned} \text{Max} &= (2-\tfrac{1}{2^{8}})\,2^{63} \\[4pt] &=2^{64}-2^{63-8} \\[4pt] &=2^{64}-2^{55}. \end{aligned}]

Passo 4

Agora calculo esses potências em inteiro para dar o valor decimal exato:
  • Já se conhece 2^{64}=18\,446\,744\,073\,709\,551\,616.
  • E 2^{55}=36\,028\,797\,018\,963\,968.
Subtraindo:
2^{64}-2^{55}=18\,446\,744\,073\,709\,551\,616 - 36\,028\,797\,018\,963\,968 = 18\,410\,715\,276\,690\,587\,648.
Então o maior número positivo finito representável é 2^{64}-2^{55}=18\,410\,715\,276\,690\,587\,648.

Passo 5

Agora o menor número positivo não nulo (menor subnormal):
  • Para subnormais o expoente usado é 1-\text{bias}. Com \text{bias}=63 isso dá 1-63=-62.
  • O menor subnormal corresponde à fração com apenas o bit menos significativo igual a 1, ou seja 0.f_{\min}=2^{-8}.
  • Então o menor valor positivo é
\text{Min}_{+} = 2^{-8}\cdot 2^{1-\text{bias}} = 2^{-8}\cdot 2^{-62} = 2^{-70}.

Passo 6

Faço aproximações decimais para dar uma ideia da escala:
  • 2^{-70} em notação decimal é aproximadamente 8{,}470329472543003\times 10^{-22}. Usando a vírgula como separador decimal (conforme pedido): 8{,}470329472543003\times 10^{-22}.
  • Para referência, o menor valor normal positivo (primeiro normal) ocorre com E=1 e fração zero e vale 2^{-62}, aproximadamente 2{,}168404344971009\times 10^{-19}.

Resposta

\text{Maior positivo representável} = 2^{64}-2^{55} = 18\,410\,715\,276\,690\,587\,648á
\text{Menor positivo não nulo representável} = 2^{-70} \approx 8{,}470329472543003\times 10^{-22}ãá

Exercícios relacionados