[1,0 ponto]
Seja a=-0.1875 um número digitado e armazenado em precisão dupla em um computador. Qual é o valor possível para b (ou qual é a faixa de valores) tal que a+b=a, sendo essa conta realizada em um computador, também em precisão dupla?
Exiba as etapas necessárias para justificar sua resposta.

Passo 1

O enunciado dá o número a=-0{,}1875 armazenado em precisão dupla (IEEE 754 binary64) e pergunta quais valores b (ou faixa de valores) fazem com que, ao somar em precisão dupla, o resultado seja igual a a, isto é, a+b=a computacionalmente. Informações relevantes dadas:
  • a=-0{,}1875 é o valor que está em ponto flutuante double.
  • A operação de soma é realizada também em precision dupla (binary64).
    A missão: encontrar a faixa de valores de b tal que a soma arredondada em double seja exatamente o mesmo bit-pattern de a.

Passo 2

Vou explicar o modelo de representação e o que determina quando a+b é arredondado para a.
Em IEEE 754 binary64 (precisão dupla):
  • O número é representado como (-1)^{\text{sign}}\times(1.f)\times 2^{E}, com um bit escondido 1 e 52 bits de fracção armazenados, totalizando p=53 bits de precisão (incluindo o 1 escondido).
  • A distância entre dois números consecutivos normalizados com o mesmo expoente E (ou seja, o tamanho do menor incremento representável nessa região) é
\text{ulp} = 2^{E-(p-1)}.
  • A aritmética de ponto flutuante usa, tipicamente, arredondamento “round-to-nearest, ties-to-even” (arredonda para o valor representável mais próximo; se empatar exatamente, escolhe o cujo campo de mantissa menos significativa é par).
Portanto, para que a+b seja representado como exatamente a, o valor exato a+b deve estar suficientemente próximo de a para que o arredondamento produza a. Concretamente, se a diferença exata entre a+b e a tiver magnitude menor que metade de um ulp em torno de a, a soma arredonda para a; no caso de igualdade exata a metade do ulp, entra a regra “ties-to-even” e o resultado pode ser a ou o vizinho dependendo da paridade da mantissa de a.

Passo 3

Vou escrever a em binário e obter o expoente E adequado.
0{,}1875 é a mesma coisa que \dfrac{3}{16}. Em binário:
0{,}1875_{10} = 0{,}0011_2.
Normalizando para a forma 1.f\times 2^{E}:
0{,}0011_2 = 1{,}1_2 \times 2^{-3}.
Portanto, para a=-0{,}1875 temos E=-3 (expoente binário) e a mantissa normalizada tem a sequência 1.1 seguida de zeros nos bits restantes.

Passo 4

Calcular o \text{ulp} na vizinhança de a.
Usando a fórmula \text{ulp}=2^{E-(p-1)} com E=-3 e p=53:
\text{ulp} = 2^{-3-(53-1)} = 2^{-3-52} = 2^{-55}.
Logo a metade do ulp é
\frac{\text{ulp}}{2} = 2^{-56}.
Para referência decimal aproximada:
2^{-55}\approx 2{,}7755575615628914\times 10^{-17}, \qquad 2^{-56}\approx 1{,}3877787807814457\times 10^{-17}.

Passo 5

Explicar a condição concreta para a+b arredondar para a.
Se o valor exato a+b estiver no intervalo fechado
\left[a-\tfrac{\text{ulp}}{2},\,a+\tfrac{\text{ulp}}{2}\right]
então, com arredondamento para o mais próximo e empates para o valor com LSB par, o resultado arredondado será a sempre que o empate (caso ocorra) favoreça a. Se o empate favorecesse o outro vizinho, o endpoint correspondente deveria ser excluído.
Portanto precisamos checar a paridade (bit menos significativo) da mantissa de a para decidir se os pontos extremos \pm \tfrac{\text{ulp}}{2} também são incluídos.

Passo 6

Determinar a paridade da mantissa de a (para aplicar ties-to-even).
A mantissa normalizada de a é 1.1 seguida de zeros nos 51 bits restantes. Isso corresponde, como inteiro de 53 bits (incluindo o 1 escondido), ao valor
m = 2^{52} + 2^{51} = 3\cdot 2^{51}.
Esse inteiro m tem o bit menos significativo igual a 0 (é múltiplo de 2^{51}), portanto a mantissa armazenada é par (LSB = 0). Isso significa que, se o valor exato a+b ficar exatamente no ponto médio entre a e o vizinho superior ou entre a e o vizinho inferior (caso de b=\pm \tfrac{\text{ulp}}{2}), a regra ties-to-even escolherá a (porque a é o representável com mantissa par).

Passo 7

Concluir a faixa de b.
Como a metade do ulp é \tfrac{\text{ulp}}{2}=2^{-56} e os empates de meio-ulp são arredondados para a (já que a tem mantissa par), qualquer b que satisfaça
-\;2^{-56}\le b \le 2^{-56}
faz com que a soma exata a+b seja arredondada para a em precisão dupla. Em forma decimal aproximada:
-1{,}3877787807814457\times 10^{-17} \le b \le 1{,}3877787807814457\times 10^{-17}.

Resposta

b\in\left[-2^{-56},\,2^{-56}\right] (aproximadamente b\in[-1{,}3877787807814457\times10^{-17},\,1{,}3877787807814457\times10^{-17}]).

Exercícios relacionados