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
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
e
, onde
e
em qual das contas ocorreu um resultado inesperado e por quê? O que pode ser modificado para resolver o problema deste cálculo?
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
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 — e
— em qual ocorreu um resultado inesperado e por quê? O que pode ser modificado para resolver o problema desse cálculo?
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 —
Dados fornecidos:
Isto significa:
- base
, - precisão
dígitos significativos (ou seja, mantissa com 4 dígitos), - expoentes variam de
até , - representação normalizada (primeiro dígito da mantissa
é não nulo, ), - arredondamento para o representável mais próximo (round-to-nearest).
Valores usados nas operações (dados no enunciado):
A resolução começa no próximo passo.
Passo 2
Entendendo como são os números representáveis em
. Vou explicar a forma geral e o que significa “normalizado” e “precisão
”.
Forma geral de um número normalizado no sistema:
onde
-
(primeiro dígito não nulo, por normalização), -
(os dígitos seguintes, pois total), - o expoente
satisfaz .
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
(que seria normalizado para , 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
(quatro dígitos: ) e expoente máximo . Logo o maior número positivo é
O maior em módulo é o mesmo valor com sinal negativo permitido, portanto o maior em módulo é
.
- O menor número positivo (normalizado) em módulo é a mantissa mínima não-nula
com expoente mínimo . Logo o menor positivo representável é
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.
- Quantas mantissas normalizadas existem?
- Primeiro dígito
tem possibilidades ( a ). - Cada um dos outros três dígitos
tem possibilidades ( a ). - Logo o número total de mantissas normalizadas é
- Quantas escolhas de expoente existem?
- Expoentes vão de
a inclusive, ou seja valores.
- Para cada mantissa e expoente há 2 sinais (
e ), então o total de números não-nulos é
- Acrescenta-se o zero (que é uma representação especial única). Portanto o total de números representáveis no sistema é
Expliquei: 9000 mantissas possíveis × 11 expoentes × 2 sinais, mais o zero.
Passo 5
Preparar os números
para operar no sistema: normalizar e ver se são representáveis exatamente com
.
Os valores dados:
Normalizando (vou escrever no formato
com 4 dígitos):
- Para
:
Portanto
é exatamente representável como
.
- Para
:
Portanto
é exatamente representável como
(mantissa
).
- Para
:
Portanto
é exatamente representável como
.
Resumo: todos os três números são exatamente representáveis no formato do sistema
.
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
, dois números consecutivos que têm o mesmo expoente diferem por uma quantidade chamada de “ulp” nessa ordem, dada por
Explicação: o último dígito da mantissa tem peso
; multiplicando por
dá
. Esse é o comprimento do passo entre representáveis com aquele expoente.
- No nosso caso
e . Para expoente (ordem de grandeza de ):
Interpretação: ao redor de
os números representáveis com o mesmo expoente diferem por
(por exemplo
,
, …).
- 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 é
.
Passo 7
Calcular
passo a passo (para detectar possível perda/invisibilidade do
).
Temos as representações:
Ao somar, é preciso alinhar expoentes; escrevendo ambos com expoente
:
A soma exata é
Agora aplicamos o arredondamento para
dígitos. Como vimos, o espaçamento (ulp) para expoente
é
. A diferença entre
e
é
que é muito menor que metade de uma ulp (
). Logo, quando o sistema arredonda
para o número representável mais próximo com
, ele volta a
ou seja, o resultado armazenado é exatamente
; o acréscimo
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
passo a passo e verificar se houve problema.
Temos:
A diferença exata:
Verificando a representabilidade:
tem a forma
, que usa exatamente quatro dígitos
. Como
coincide com um número representável do sistema, não há arredondamento nem perda: o resultado é exatamente representável.
Portanto
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):
.
Por quê: porqueé muito menor do que a distância entre números representáveis na ordem de grandeza de . Em torno de o passo entre representáveis (ulp) é . O valor de é , ou seja vezes menor que a ulp; portanto não altera o número arredondado . Em termos práticos, é perdido quando somado a . -
A operação
está ok porque a subtração altera uma casa maior que a ulp local ( é maior que a metade da ulp ), e o resultado é exatamente representável com .
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
ao somar com
:
- Aumentar a precisão
(usar mais dígitos significativos). No nosso caso, para que possa afetar uma soma na ordem de a precisão deve ser aumentada até que a ulp em seja menor ou igual a . Como a ulp é , para queremos
Portanto, mudando para, por exemplo,
(precisão
) o espaçamento em
seria
e
deixaria de ser automaticamente perdido (fica representável e influencia a soma).
-
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
. -
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
muito pequeno e um muito grande, reordenar não resolve: continuará sendo pequeno demais para ser representado quando combinados diretamente. -
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
for menor do que o menor incremento representável na ordem de .
A recomendação mais direta e simples para este problema específico: aumentar a precisão para pelo menos
(por exemplo passar para
ou usar aritmética com mais dígitos significativos). Isso garante que
seja um múltiplo de ulp em
e, portanto, não seja automaticamente descartado por arredondamento.
Resposta
a) Maior em módulo:
. Menor (não-nulo) em módulo:
.
b) números representáveis (incluindo o zero).
e) O resultado inesperado ocorreu em , porque
é muito menor que a distância entre números representáveis na ordem de
(ulp em
é
); assim
foi “engolido” pelo arredondamento. Para resolver: aumentar a precisão (por exemplo para
, i.e. usar
ou aritmética de precisão estendida) ou usar aritmética de maior precisão.
b)
e) O resultado inesperado ocorreu em