- Seja
Descreva 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: descrever um algoritmo para avaliar
em um sistema de ponto flutuante de tal forma que o erro relativo do resultado seja da ordem do erro de representação (ou seja, da ordem do unit roundoff).
Informações relevantes que o enunciado fornece e que vou usar: é um número real qualquer; o problema típico aqui é perda de precisão por cancelamento quando
e
são grandes e quase iguais (caso típico:
positivo e |
| grande). O objetivo é propor um procedimento numérico estável (relativamente) e justificar por que o erro relativo ficará da ordem do unit roundoff.
Informações relevantes que o enunciado fornece e que vou usar:
Passo 2
Entendendo o problema numérico: por que há perigo de erro grande?
Quando é grande e positivo,
. Assim
, que é um número pequeno obtido como diferença de dois números grandes e quase iguais — isso causa “cancelamento catastrófico”: muitos dígitos significativos se perdem, o erro absoluto pode ser pequeno mas o erro relativo do valor pequeno pode ficar enorme. Para evitar isso, queremos reescrever a expressão de modo a não subtrair dois números quase iguais.
Quando
Passo 3
Truque algébrico (conjugado): multiplicar por
. Isso não muda o valor, mas transforma a expressão numa forma numericamente melhor quando há cancelamento:
Portanto temos a identidade exata
Observe que a forma direita não contém subtração de dois termos grandes: é a recíproca de uma soma que, para
grande e positivo, é da ordem de
, então o valor final é pequeno mas obtido de modo estável.
Passo 4
Decisão prática do algoritmo (ideia): usar a forma que evita cancelamento quando ela é necessária. Em geral:
- Se
, compute como
porque aí
e
são do mesmo sinal e próximos, e a forma direta
cancela dígitos; a forma com o conjugado evita isso.
- Se
, compute diretamente como
porque nesse caso
é positivo e a expressão é equivalente a uma soma de números de mesma ordem (não há subtração de quase-iguais) — ou seja, não há risco de cancelamento forte.
Vou agora explicar por que essa regra dá erro relativo da ordem do unit roundoff.
Passo 5
Modelo de erro na aritmética de ponto flutuante (resumo didático):
Se denota o resultado em ponto flutuante e
é o unit roundoff (erro de arredondamento relativo máximo), então para operações binárias básicas
(adição, multiplicação, divisão) e para a função
podemos assumir, em termos simplificados, que o resultado satisfaz
Se
onde
é uma pequena constante (geralmente pequeno como 1 ou 2, dependendo da operação). Para a raiz quadrada também vale um modelo similar:
com
. Esse é o modelo clássico de análise de erros de ponto flutuante; ele será usado qualitativamente para mostrar que não perdemos precisão relativa além de um fator da ordem de
.
Passo 6
Análise do caso
usando a forma do conjugado:
Defina . No ponto flutuante vamos obter
com
Defina
Em seguida computamos
(no dispositivo de ponto flutuante): o resultado será
com
. Por fim calculamos
, com
Juntando tudo,
é aproximadamente
multiplicado por
. Portanto o erro relativo em
satisfaz
isto é, da ordem do unit roundoff. Intuição: estamos calculando um recíproco de uma soma de ordem
(não há diferença de quase-iguais), logo cada operação tem erro relativo pequeno e eles não se amplificam.
Passo 7
Análise do caso
usando a forma direta:
Quando , note que
é uma soma de dois termos positivos de ordem parecida — não há subtração entre quase-iguais. Assim, computando
e depois
(que é na prática
) a propagação do erro é estándar: a soma de dois números de mesma ordem introduz erro relativo da ordem de
. Logo novamente obtemos
Quando
Passo 8
Observação sobre extremos de magnitude (overflow/underflow) e uma melhoria opcional:
- Se
for gigantesco, calcular pode overflowar antes de tirar a raiz. Uma técnica simples para evitar overflow é trabalhar com escala: escrever e computar quando é tão grande que pode causar overflow. Isso exige testar o tamanho de relativo ao maior número representável. - Para valores moderados essas proteções não são necessárias; o algoritmo com a escolha do ramo já garante estabilidade relativa.
- Em muitas bibliotecas numéricas, a forma com o conjugado é suficiente para evitar perda de dígitos significativos quando
.
Passo 9
Resumo didático (como fazer na prova/implementação): expliquei o porquê da escolha do ramo e demonstrei que cada operação tem erro relativo pequeno, portanto o resultado final tem erro relativo da ordem do unit roundoff
. Isso responde o pedido: o algoritmo consiste em escolher a fórmula numericamente estável dependendo do sinal de
.
Resposta
Se
: calcular
Se
: calcular
(Adicionar opcionalmente proteção contra overflow calculando
quando
for muito grande.)