Os números que podem ser representados com exatidão em um computador são denominados números de máquina.
A representação binária de 0.2 é:
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,-38,38) ?

Passo 1

O enunciado dá:
  • A representação binária exata periódica de 0.2 é
0.2 = 0.001100110011\ldots_2.
  • O computador usa o sistema de ponto flutuante F(2,16,-38,38).
O que a pergunta pede:
  • Qual é o erro na representação de 0.2 nesse sistema de ponto flutuante? (ou seja, qual a diferença entre o valor armazenado pelo computador e o valor real 0{,}2).

Passo 2

Primeiro vamos normalizar a expansão binária dada. A repetição é \ldots 0011 0011\ldots. Ao deslocar a vírgula 3 casas para a direita obtemos a forma normalizada:
0{,}2 = 0.001100110011\ldots_2 = 1.1001100110011\ldots_2 \times 2^{-3}.
Portanto o expoente verdadeiro é e=-3 e a mantissa (significand) normalizada é 1.1001100110011\ldots_2.

Passo 3

Interpretação do formato F(2,16,-38,38):
  • base \beta=2;
  • precisão t=16 significa que a mantissa tem 16 dígitos binários no total, ou seja a forma normalizada 1.\text{(15 bits de fração)}çã — o bit implícito 1 mais 15 bits de fração armazenados;
  • o expoente varia entre -38 e 38 (o expoente e=-3 está dentro do intervalo, logo não há under/overflow);
  • vamos assumir arredondamento para o mais próximo (round-to-nearest), procedimento padrão.

Passo 4

Escrevemos os primeiros bits da mantissa normalizada 1.1001100110011\ldots. Os bits fracionários repetem o padrão 1001. Listando os primeiros bits fracionários b_1,b_2,\ldots:
b_1 b_2 b_3 b_4 b_5 b_6 b_7 b_8 b_9 b_{10} b_{11} b_{12} b_{13} b_{14} b_{15} b_{16}\ldots =1\;0\;0\;1\;1\;0\;0\;1\;1\;0\;0\;1\;1\;0\;0\;1\;\ldots
Como t=16 inclui o 1 antes da vírgula mais 15 bits de fração, mantemos b_1 até b_{15} e examinamos b_{16} para arredondar. Aqui b_{16}=1 e há bits não nulos depois dele (a cauda não é zero), portanto pelo arredondamento para o mais próximo devemos arredondar a mantissa para cima (incrementar a ULP).

Passo 5

A mantissa truncada (antes de incrementar) é
1.\underbrace{100110011001100}_{15\\ \text{bits}}_2.
Ao arredondar para cima, somamos 1 no último bit fracionário, obtendo a mantissa armazenada
1.\underbrace{100110011001101}_{15\\ \text{bits}}_2.
Escrevendo os 16 dígitos significativos (bit implícito + 15 bits) como inteiro binário temos
1100110011001101_2.
Em hexadecimal isso é 0xCCCD e em decimal
N = 1100110011001101_2 = 52429.
O valor em ponto flutuante armazenado é, com expoente e=-3,
\widehat{x} = \frac{N}{2^{15}}\times 2^{-3} = \frac{N}{2^{18}} = \frac{52429}{2^{18}} = \frac{52429}{262144}.

Passo 6

O erro absoluto é
\widehat{x}-0{,}2 = \frac{52429}{262144}-\frac{1}{5}.
Colocando em denominador comum 5\cdot 2^{18} obtemos
\widehat{x}-\frac{1}{5}=\frac{5\cdot 52429-262144}{5\cdot 262144}=\frac{262145-262144}{5\cdot 262144}=\frac{1}{5\cdot 2^{18}}.
Logo o erro absoluto é exatamente
\frac{1}{5\cdot 2^{18}}=\frac{1}{1310720}.
Em forma decimal aproximada (usar vírgula como separador):
\frac{1}{1310720}\approx 0{,}000000762939453125.
Se quiser o erro relativo (apenas como informação extra), temos
\frac{\widehat{x}-0{,}2}{0{,}2}=\frac{1}{262144}=2^{-18}\approx 0{,}000003814697265625.

Resposta

\displaystyle \text{Erro}=\frac{1}{1310720}\approx 0{,}000000762939453125

Exercícios relacionados