Uma das avaliações que você fez para ser selecionado para um programa de trainee, consiste em planejar um sistema de geolocalização e é sugerido o sistema de ponto flutuante F(10,4,-5,5) normalizado utilizando arredondamento. Assim, foi solicitado mais detalhes sobre o sistema de ponto flutuante respondendo as seguintes perguntas:
a) Qual o maior eo menor número em módulo que é possível representar neste sistema numérico de ponto flutuante?
b) Quantos números são possiveis representar neste sistema de ponto flutuante?
e) Em uma segunda etapa de testes, ocorreu uma falha em uma das contas realizadas pelo sistema, devido a uma resposta inesperada. As duas últimas contas realizadas antes da falha foram x+y e y-z, onde x=0,1 \times 10^{-4}, y=0,8345 \times 10^{1} e z=0,2 \times 10^{-2} em qual das contas ocorreu um resultado inesperado e por quê? O que pode ser modificado para resolver o problema deste cálculo?

Passo 1

O enunciado pede três coisas, e nos dá uma especificação do sistema e três números. Vou listar com clareza o que é pedido e quais são os dados fornecidos.
Perguntas:
a) Qual o maior e o menor número em módulo que é possível representar no sistema de ponto flutuante dado?
b) Quantos números é possível representar nesse sistema de ponto flutuante?
e) Entre as duas últimas operações realizadas antes da falha — x+y e y-z — em qual ocorreu um resultado inesperado e por quê? O que pode ser modificado para resolver o problema desse cálculo?
Dados fornecidos:
\text{o sistema é }F(10,4,-5,5)\text{, normalizado, com arredondamento.}é
Isto significa:
  • base b=10,
  • precisão p=4 dígitos significativos (ou seja, mantissa com 4 dígitos),
  • expoentes variam de e_{\min}=-5 até e_{\max}=5,
  • representação normalizada (primeiro dígito da mantissa d_0 é não nulo, d_0\in\{1,\dots,9\}),
  • arredondamento para o representável mais próximo (round-to-nearest).
Valores usados nas operações (dados no enunciado):
x = 0,1 \times 10^{-4},\quad y = 0,8345 \times 10^{1},\quad z = 0,2 \times 10^{-2}.
A resolução começa no próximo passo.

Passo 2

Entendendo como são os números representáveis em F(10,4,-5,5). Vou explicar a forma geral e o que significa “normalizado” e “precisão p=4”.
Forma geral de um número normalizado no sistema:
\pm d_0.d_1 d_2 d_3 \times 10^{e},
onde
  • d_0\in\{1,2,\dots,9\} (primeiro dígito não nulo, por normalização),
  • d_1,d_2,d_3\in\{0,1,\dots,9\} (os dígitos seguintes, pois p=4 total),
  • o expoente e satisfaz -5\le e\le 5.
Explicando em palavras fáceis:
  • “Precisão 4” significa que no total temos 4 dígitos significativos (um antes do ponto decimal e três depois).
  • A normalização força o primeiro dígito a ser não nulo, evitando representações redundantes como 0.0345\times10^{2} (que seria normalizado para 3.45\times10^{0}, por exemplo).
  • O arredondamento: quando um resultado não é exatamente representável, escolhe-se o número representável mais próximo (empates normalmente por alguma regra, mas aqui basta entender que arredondamos para o mais próximo).

Passo 3

Determinar o maior e o menor número em módulo representáveis (resposta da parte a)).
  • O maior positivo representável tem a mantissa máxima 9.999 (quatro dígitos: 9,9,9,9) e expoente máximo e_{\max}=5. Logo o maior número positivo é
\boxed{9{,}999 \times 10^{5}}.
O maior em módulo é o mesmo valor com sinal negativo permitido, portanto o maior em módulo é 9{,}999\times10^{5}.
  • O menor número positivo (normalizado) em módulo é a mantissa mínima não-nula 1.000 com expoente mínimo e_{\min}=-5. Logo o menor positivo representável é
\boxed{1{,}000 \times 10^{-5}}.
Novamente, o menor em módulo (considerando sinais) é esse valor com sinal negativo também permitido. Observação: o zero é representável, mas quando a pergunta pede “menor número em módulo” normalmente refere-se ao menor não-nulo normalizado; aqui deixei explícito esse menor não-nulo.

Passo 4

Contagem dos números representáveis (resposta da parte b)). Vou explicar passo a passo como contar.
  1. Quantas mantissas normalizadas existem?
  • Primeiro dígito d_0 tem 9 possibilidades ( 1 a 9).
  • Cada um dos outros três dígitos d_1,d_2,d_3 tem 10 possibilidades ( 0 a 9).
  • Logo o número total de mantissas normalizadas é
9 \times 10^{3} = 9000.
  1. Quantas escolhas de expoente existem?
  • Expoentes vão de -5 a 5 inclusive, ou seja 5-(-5)+1 = 11 valores.
  1. Para cada mantissa e expoente há 2 sinais ( + e -), então o total de números não-nulos é
2 \times 9000 \times 11 = 198000.
  1. Acrescenta-se o zero (que é uma representação especial única). Portanto o total de números representáveis no sistema é
\boxed{198001}.
Expliquei: 9000 mantissas possíveis × 11 expoentes × 2 sinais, mais o zero.

Passo 5

Preparar os números x,y,z para operar no sistema: normalizar e ver se são representáveis exatamente com p=4.
Os valores dados:
x = 0,1 \times 10^{-4},\quad y = 0,8345 \times 10^{1},\quad z = 0,2 \times 10^{-2}.
Normalizando (vou escrever no formato d_0.d_1 d_2 d_3 \times 10^{e} com 4 dígitos):
  • Para x:
x = 0{,}1 \times 10^{-4} = 0{,}00001 = 1{,}000 \times 10^{-5}.
Portanto x é exatamente representável como \,1{,}000\times10^{-5}.
  • Para y:
y = 0{,}8345 \times 10^{1} = 8{,}345 \times 10^{0}.
Portanto y é exatamente representável como \,8{,}345\times10^{0} (mantissa 8,3,4,5).
  • Para z:
z = 0{,}2 \times 10^{-2} = 0{,}002 = 2{,}000 \times 10^{-3}.
Portanto z é exatamente representável como \,2{,}000\times10^{-3}.
Resumo: todos os três números são exatamente representáveis no formato do sistema F(10,4,-5,5).

Passo 6

Explicar a noção de “espaçamento” (ulp) e como o arredondamento atua em uma soma entre números de magnitudes muito diferentes — isso é essencial para entender qual operação falhou.
  • Em um sistema F(b,p,\dots), dois números consecutivos que têm o mesmo expoente e diferem por uma quantidade chamada de “ulp” nessa ordem, dada por
\text{ulp}(e) = b^{\,e-(p-1)}.
Explicação: o último dígito da mantissa tem peso b^{-(p-1)}; multiplicando por b^{e} b^{e-(p-1)}. Esse é o comprimento do passo entre representáveis com aquele expoente.
  • No nosso caso b=10 e p=4. Para expoente e=0 (ordem de grandeza de y):
\text{ulp}(0) = 10^{\,0-(4-1)} = 10^{-3} = 0{,}001.
Interpretação: ao redor de 8{,}345\times10^{0} os números representáveis com o mesmo expoente diferem por 0{,}001 (por exemplo 8{,}345, 8{,}346, …).
  • Com arredondamento para o representável mais próximo, uma alteração menor que metade de uma ulp não muda o valor arredondado. A metade de uma ulp aqui é 0{,}0005.

Passo 7

Calcular x+y passo a passo (para detectar possível perda/invisibilidade do x).
Temos as representações:
x = 1{,}000 \times 10^{-5} = 0{,}00001, \qquad y = 8{,}345 \times 10^{0} = 8{,}345.
Ao somar, é preciso alinhar expoentes; escrevendo ambos com expoente 0:
x = 0{,}00001 \times 10^{0},\qquad y = 8{,}34500 \times 10^{0}.
A soma exata é
x+y = 8{,}34501.
Agora aplicamos o arredondamento para p=4 dígitos. Como vimos, o espaçamento (ulp) para expoente 0 é 0{,}001. A diferença entre y e y+x é 0{,}00001 que é muito menor que metade de uma ulp ( 0{,}0005). Logo, quando o sistema arredonda 8{,}34501 para o número representável mais próximo com p=4, ele volta a
\boxed{8{,}345 \times 10^{0}},
ou seja, o resultado armazenado é exatamente y; o acréscimo x foi “engolido” ou perdido.
Isso é o fenômeno conhecido como “absorção” ou perda de significância por soma com um número muito menor do que a precisão local permite.

Passo 8

Calcular y-z passo a passo e verificar se houve problema.
Temos:
y = 8{,}345 \times 10^{0},\qquad z = 2{,}000 \times 10^{-3} = 0{,}002.
A diferença exata:
y-z = 8{,}345 - 0{,}002 = 8{,}343.
Verificando a representabilidade: 8{,}343 tem a forma 8{,}343 \times 10^{0}, que usa exatamente quatro dígitos 8,3,4,3. Como 8{,}343 coincide com um número representável do sistema, não há arredondamento nem perda: o resultado é exatamente representável.
Portanto y-z não produz um resultado inesperado neste sistema.

Passo 9

Responder claramente qual operação gerou o resultado inesperado e explicar por que (resumindo didaticamente).
  • Operação que falhou (resultado inesperado): x+y.
    Por quê: porque x é muito menor do que a distância entre números representáveis na ordem de grandeza de y. Em torno de y o passo entre representáveis (ulp) é 10^{-3}. O valor de x é 10^{-5}, ou seja 100 vezes menor que a ulp; portanto x não altera o número arredondado y. Em termos práticos, x é perdido quando somado a y.
  • A operação y-z está ok porque a subtração altera uma casa maior que a ulp local ( 0{,}002 é maior que a metade da ulp 0{,}0005), e o resultado 8{,}343 é exatamente representável com p=4.

Passo 10

O que pode ser modificado para resolver o problema deste cálculo? (opções práticas e qual a mais direta)
Opções para evitar a perda de x ao somar com y:
  1. Aumentar a precisão p (usar mais dígitos significativos). No nosso caso, para que x=10^{-5} possa afetar uma soma na ordem de 10^{0} a precisão deve ser aumentada até que a ulp em e=0 seja menor ou igual a 10^{-5}. Como a ulp é 10^{e-(p-1)}, para e=0 queremos
10^{-(p-1)} \le 10^{-5} \quad\Longrightarrow\quad p-1 \ge 5 \quad\Longrightarrow\quad p\ge 6.
Portanto, mudando para, por exemplo, F(10,6,-5,5) (precisão p=6) o espaçamento em e=0 seria 10^{-5} e x deixaria de ser automaticamente perdido (fica representável e influencia a soma).
  1. Usar aritmética de precisão estendida (por exemplo, 64-bit em ponto flutuante em vez de 32-bit ou usar biblioteca de alta precisão), o que é equivalente a aumentar p.
  2. Mudar o algoritmo de cálculo: numa soma de muitos termos, somar termos pequenos entre si primeiro e depois somar ao termo grande (reduz erro de truncamento acumulado). No caso isolado de apenas um x muito pequeno e um y muito grande, reordenar não resolve: x continuará sendo pequeno demais para ser representado quando combinados diretamente.
  3. Usar técnicas numéricas compensadas (p.ex. soma de Kahan) quando houver muitas somas acumulativas para reduzir erro, mas isso não substitui falta de precisão se x for menor do que o menor incremento representável na ordem de y.
A recomendação mais direta e simples para este problema específico: aumentar a precisão para pelo menos p=6 (por exemplo passar para F(10,6,-5,5) ou usar aritmética com mais dígitos significativos). Isso garante que x=10^{-5} seja um múltiplo de ulp em e=0 e, portanto, não seja automaticamente descartado por arredondamento.

Resposta

a) Maior em módulo: 9{,}999\times 10^{5}. Menor (não-nulo) em módulo: 1{,}000\times 10^{-5}.
b) 198001 números representáveis (incluindo o zero).
e) O resultado inesperado ocorreu em x+y, porque x=1{,}000\times10^{-5} é muito menor que a distância entre números representáveis na ordem de y (ulp em e=0 é 10^{-3}); assim x foi “engolido” pelo arredondamento. Para resolver: aumentar a precisão (por exemplo para p\ge6, i.e. usar F(10,6,-5,5) ou aritmética de precisão estendida) ou usar aritmética de maior precisão.

Exercícios relacionados