Seja uma máquina fictícia que opera em um sistema de ponto flutuante de base binária e que representa os números usando 32 bits. Seja o seguinte número representado nesta máquina:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
0
0
1
1
1
0
1
1
0
1
1
1
1
0
1
1
0
Se o primeiro bit indica o sinal do número, o segundo é o sinal do expoente, os próximos seis são o expoente, e os vinte e quatro últimos são a mantissa, responda às seguintes perguntas:
(a) O número está normalizado? Se não, normalize-o.
(b) O número é positivo ou negativo?
(c) Em módulo, o número é menor do que 1 ou maior do que 1 ?
(d) Como ficaria a representação deste número no sistema
(i.e., base decimal, 6 dígitos na mantissa, e expoente variando de
)?
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |
(a) O número está normalizado? Se não, normalize-o.
(b) O número é positivo ou negativo?
(c) Em módulo, o número é menor do que 1 ou maior do que 1 ?
(d) Como ficaria a representação deste número no sistema
Passo 1
O enunciado pede quatro coisas: (a) verificar se o número está normalizado e, se não estiver, normalizá‑lo; (b) dizer se o número é positivo ou negativo; (c) dizer se, em módulo, o número é menor do que 1 ou maior do que 1; (d) escrever a mesma quantidade no sistema
(base decimal, 6 dígitos de mantissa, expoente em
).
As informações dadas (extraídas diretamente da tabela de bits do enunciado) são:
- Primeiro bit (bit
) — sinal do número: . - Segundo bit (bit
) — sinal do expoente: . - Próximos seis bits (bits
a ) — magnitude do expoente em binário: . - Últimos vinte e quatro bits (bits
a ) — mantissa (bits da fração), da esquerda para a direita:
Vou usar essas informações para responder (a)–(d).
Passo 2
Interpretação numérica do formato usado e cálculo do valor exato (passo‑a‑passo didático).
Como a máquina usa base binária e os campos foram descritos, uma maneira natural de ver o valor real é:
- o bit de sinal
dá ; - o expoente tem sinal
e magnitude (aqui significa expoente positivo); - a mantissa está armazenada como 24 bits de fração
. Vou interpretar que esses 24 bits representam a fração
onde
é o inteiro cujo binário é
.
O valor numérico é então
O valor numérico é então
com expoente (assinado)
porque o bit de sinal do expoente é
(positivo).
Agora extraio os campos numericamente:
-
(logo número positivo). -
(expoente positivo). - Bits do expoente
são . Em decimal, . - A mantissa em bits
forma o inteiro (agrupando em hex para facilitar) . Convertendo, .
Substituindo em
:
Fazendo a divisão (cálculo exato por divisão longa), obtemos a expansão decimal
(é suficiente saber alguns dígitos para os próximos itens).
Passo 3
Verificação de normalização e processo para normalizar (explicação didática).
O que significa “normalizado” em ponto flutuante binário? Significa que a mantissa/significand está colocada de modo que, na base 2, a parte antes da vírgula seja
(ou seja, o significand está na forma
), isto é,
significand
. Em termos dos bits armazenados sem bit oculto, isso corresponde a ter o primeiro bit da mantissa igual a
.
Aqui o primeiro bit da mantissa
é
(veja passo 1). Portanto, o número NÃO está normalizado.
Como normalizar? Procedimento:
- Encontrar o primeiro bit 1 na mantissa; aqui ele aparece em
(ou seja, o segundo bit do campo de mantissa). - Deslocar a mantissa à esquerda até que esse 1 passe a ser o primeiro bit
. Cada deslocamento à esquerda por uma posição multiplica por ; para manter o mesmo valor devemos então reduzir o expoente em para cada deslocamento (porque ). - Aqui só é preciso deslocar uma posição (
), porque . Assim o novo expoente será (positivo), e a nova mantissa (24 bits) é a antiga deslocada uma posição à esquerda, completando com zero à direita.
Calculando a mantissa normalizada (deslocamento de uma posição):
- Mantissa original
= . - Após deslocar 1 bit à esquerda obtemos
= .
Portanto a representação normalizada (campos) passa a ser:
- sinal
; - sinal do expoente
(continua positivo); - bits do expoente (magnitude) para
são ; - mantissa normalizada (24 bits) é
.
Em notação de 32 bits (campo a campo):
Passo 4
Sinal do número (resposta de (b)) — explicação curta e clara.
O primeiro bit (bit
) vale
. Pelo formato dado, isso indica sinal positivo. Logo o número é positivo.
Passo 5
Comparação do módulo com 1 (resposta de (c)) — explicação usando normalização e valor decimal.
Se o número normalizado tem forma
e
então certamente o valor em módulo é maior que
. Aqui, após normalização encontramos
(positivo), portanto o módulo é muito maior que
. Confirmação numérica:
.
Passo 6
Conversão para
(resposta de (d)) — como fazer, passo a passo.
O sistema
usa base decimal e mantissa com 6 dígitos significativos (um dígito antes da vírgula e mais 5 após, total 6 dígitos significativos), em forma normalizada
com
e
.
Nós já temos o valor decimal aproximado:
Para normalizar em base 10 escrevemos
. Agora aplicamos arredondamento para 6 dígitos significativos. Os seis primeiros dígitos significativos são
(ou seja,
); o sétimo dígito é
, portanto arredondamos o sexto dígito
para
. Assim a mantissa com 6 dígitos fica
.
O expoente resultante é
, que está dentro do intervalo permitido
. O sinal é positivo.
Logo, na notação pedida,
Resposta
(a) Não. Normalizada (campos):
.
(b) Positivo.
(c) Em módulo é maior do que 1.
(d) .
(b) Positivo.
(c) Em módulo é maior do que 1.
(d)