Seja
Descreve o algoritmo para calcular valor da função
utilizando um sistema de ponto flutuante, tal que o erro relativo do resultado será da ordem do erro da representação.
Passo 1
O enunciado dá a função
e pede um algoritmo para computá-la em um sistema de ponto flutuante de forma que o erro relativo do resultado seja da ordem do erro da representação (i.e., da ordem do unit roundoff).
Informações relevantes que o enunciado fornece ou implica:
Informações relevantes que o enunciado fornece ou implica:
- Queremos um algoritmo numérico, não uma prova puramente teórica.
- O objetivo é controlar erros de arredondamento (erro relativo da ordem do erro da representação).
- Devemos evitar perdas de precisão (principalmente cancelamentos) que aumentem o erro acima da ordem do unit roundoff.
Passo 2
Entendendo o modelo de ponto flutuante (rápido e prático): seja
o unit roundoff (medida do erro de arredondamento, da ordem do erro da representação). Para operações aritméticas e raiz quadrada usamos o modelo padrão
onde
é o resultado arredondado. Esse modelo nos permite rastrear como o erro relativo se propaga por algumas operações.
Passo 3
Identificar o perigo numérico: onde ocorre perda de precisão?
Repare a soma . Para
negativo e de grande magnitude
temos
Repare a soma
e como
é negativo,
, ou seja, um número muito pequeno obtido pela diferença de dois números grandes — isso causa cancelamento e perda de dígitos significativos se fizermos a soma diretamente. Esse é o ponto crítico que devemos contornar.
Passo 4
A identidade algébrica que salva a situação: escrevemos
Dessa igualdade segue exatamente
Isto é, em vez de calcular diretamente
quando há risco de cancelamento, podemos calcular o seu recíproco por uma diferença que não cancela e depois inverter. Para
a quantidade
é uma soma de termos de mesma ordem (porque
é grande e positivo), logo é computada sem grande perda de dígitos.
Passo 5
Estratégia prática: usar uma fórmula diferente dependendo do sinal de
.
- Se
então é grande (≈ para grande) e pode ser computado diretamente com segurança. - Se
então usamos a identidade acima e computamos
de modo a evitar o cancelamento.
Passo 6
Algoritmo passo a passo (descrito em palavras e depois em pseudocódigo):
- Calcular
. (Recomenda-se usar uma rotina segura como se disponível, para evitar overflow/underflow ao formar .) - Se
então calcular . Caso contrário (se ) calcular . - Retornar
.
Explicação intuitiva: no ramo
evitamos a diferença direta que causa cancelamento; no ramo
não há cancelamento significativo e a soma é estável.
Passo 7
Análise de erro (intuitiva e com o modelo de ponto flutuante):
- Cálculo de
: com o modelo de arredondamento temos com se a rotina de raiz/quadrado for corretamente arredondada (usar reduz riscos de overflow). - Caso
: então calculamos com . Assim tem erro relativo da ordem de . Finalmente com . Composto, o erro relativo de permanece da ordem . - Caso
: primeiro calculamos . Aqui não há cancelamento porque e têm o mesmo sinal (soma de números grandes positivos), logo é bem representado e . Depois . Portanto também tem erro relativo da ordem de . Finalmente tem erro relativo da ordem de .
Portanto, em ambos os ramos, cada passo introduz apenas erros de arredondamento da ordem dee a combinação mantém o erro relativo do resultado na ordem de . Em palavras: o algoritmo é numericamente estável (erro relativo da ordem do erro da representação).
Passo 8
Observações práticas e extremos:
- Use
quando disponível em vez de calcular como , porque evita overflow quando é muito grande e reduz problemas com subnormais. Em muitos ambientes é otimizada e também é corretamente arredondada. - O algoritmo assume arredondamento com unidade de arredondamento
e operações básicas com erro relativo ≤ . Para sistemas exóticos (ponto flutuante não-IEEE) convém checar garantias locais. - Não há problema de sinal: nota que
para todo , então não precisamos tratar casos adicionais de sinal do resultado.
Passo 9
Um exemplo rápido (intuitivo) para ver a melhoria: para
,
- cálculo direto de
faz a soma de com algo como , causando cancelamento; - com a fórmula alternativa calculamos
(que é grande e bem representado) e tomamos o inverso, obtendo o pequeno valor correto com precisão de arredondamento.
Resposta
Se disponível use
senão
.