Os números que podem ser representados com exatidão em um computador são denominados números de máquina. Nas operações de ponto fixo, os números de máquina são representados como uma soma limitada de termos da forma:
\pm \sum_{k=1}^{m} d_{k} 2^{-k}, d_{k} \in\{0,1\}
A representação binária de 0.2 é a seguinte fração periódica:
0.2=0.001100110011 \ldots
Qual é o erro na representação de 0.2 em um computador que utilize o sistema de ponto flutuante F(2,16,-37,38) ?

Passo 1

O que o enunciado dá e o que pede:
  • Dá a representação binária periódica de 0{,}2:
0{,}2 = 0{.}001100110011\ldots
  • Dá o sistema de ponto flutuante F(2,16,-37,38).
  • Pergunta: qual é o erro na representação de 0{,}2 nesse sistema (ou seja, a diferença entre o número representado pelo computador e o valor exato 0{,}2).
Informações relevantes extraídas do enunciado:
  • A base é 2.
  • A precisão é 16 dígitos binários na mantissa (isto é, 16 bits significativos).
  • A expansão binária de 0{,}2 é periódica e conhecida (repetição de bloco).
  • Presume-se arredondamento para o valor de ponto flutuante mais próximo (arredondamento para o mais próximo é o procedimento padrão que vamos usar).

Passo 2

Entender a forma normalizada do número binário periódico.
A expansão dada:
0{,}2 = 0{.}001100110011\ldots
Observe que o primeiro 1 aparece na terceira posição depois da vírgula. Para escrever em forma normalizada (mantissa entre 1 e 2 em base 2) deslocamos a vírgula três posições para a direita:
0{.}001100110011\ldots = 1{.}1001100110011\ldots \times 2^{-3}
Portanto a mantissa infinita é
m = 1{.}1001100110011\ldots
e o expoente é e=-3.

Passo 3

Interpretar F(2,16,-37,38) quanto à mantissa e ao arredondamento.
  • Precisão 16 significa que a mantissa armazenada tem 16 bits significativos no total. Em forma normalizada isso corresponde a 1 bit implícito de ordem inteira (o 1 à esquerda da vírgula) e 15 bits fracionários armazenados.
  • Assim, a mantissa armazenável tem a forma
1{.}b_1 b_2 \ldots b_{15}
onde cada b_k\in\{0,1\}.
  • Para arredondar a mantissa infinita, tomamos os 15 bits fracionários mais significativos e examinamos os bits seguintes (guard bit e sticky bits) para decidir se arredondamos para cima ou não. Adotaremos arredondamento para o mais próximo; se o bit seguinte (guard) for 1 e houver quaisquer bits não nulos depois (sticky) então arredonda-se para cima.

Passo 4

Listar explicitamente os primeiros bits da mantissa infinita para extrair os 16 bits significativos.
A mantissa infinita é
1{.}10011001100110011\ldots
Vamos anotar os 16 bits significativos (o primeiro é o 1 à esquerda da vírgula, seguido de 15 bits fracionários):
Os 16 bits são
1,\;1,\;0,\;0,\;1,\;1,\;0,\;0,\;1,\;1,\;0,\;0,\;1,\;1,\;0,\;0
ou seja a palavra binária de 16 bits
1100110011001100.

Passo 5

Determinar o arredondamento usando o bit seguinte (guard) e os bits seguintes (sticky).
  • O próximo bit após esses 16 é o bit 17 da mantissa normalizada; olhando a périodicidade, esse bit é 1.
  • Além disso existem bits não nulos após o bit 17 (a repetição continua), logo o conjunto guard+sticky indica que devemos arredondar para cima (arredondamento para o mais próximo).
  • Arredondar para cima equivale a somar 1 à unidade menos significativa armazenada (ao último bit desses 16 bits). Como temos 16 bits significativos com 15 bits fracionários, a unidade menos significativa tem peso 2^{-15} na mantissa.

Passo 6

Calcular o valor da mantissa truncada e arredondada.
Interpretemos os 16 bits 1100110011001100 como um inteiro K com peso 2^{15} para o primeiro bit. Esse inteiro é
K = \text{binary }1100110011001100 = \text{hex } \text{CCCC} = 52428.
A mantissa truncada vale
M_{\text{trunc}} = \frac{K}{2^{15}} = \frac{52428}{32768} = 1{,}5999755859375.
Como arredondamos para cima (adicionamos 1 à LSB de peso 2^{-15}), a mantissa arredondada passa a ser
M_{\text{round}} = M_{\text{trunc}} + 2^{-15} = \frac{52428+1}{2^{15}} = \frac{52429}{32768} = 1{,}600006103515625.

Passo 7

Calcular o número de ponto flutuante representado e o erro absoluto.
O número representado pelo computador (após normalização com expoente -3) é
\hat{x} = M_{\text{round}}\times 2^{-3} = \frac{52429}{32768}\times 2^{-3} = \frac{52429}{262144}.
O valor exato é 0{,}2 = \dfrac{1}{5}. Assim o erro absoluto (representação menos valor exato) é
\hat{x} - 0{,}2 = \frac{52429}{262144} - \frac{1}{5} = \frac{52429 - 262144/5}{262144} = \frac{52429 - 52428{,}8}{262144} = \frac{0{,}2}{262144} = \frac{1}{5\cdot 262144} = \frac{1}{1310720}.
Em forma decimal,
\frac{1}{1310720} \approx 7{,}62939453125\times 10^{-7}.
Portanto o erro é positivo (a representação é ligeiramente maior que 0{,}2) e tem valor exato \dfrac{1}{1310720}.

Resposta

\dfrac{1}{1310720}\approx 7{,}62939453125\times10^{-7}

Exercícios relacionados