1. Seja
f(x)=\sqrt{1+x^{2}}-x .
Descreva o algoritmo para calcular valor da função f(x) 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
f(x)=\sqrt{1+x^{2}}-x
e pede: descrever um algoritmo para avaliar f(x) 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: x é um número real qualquer; o problema típico aqui é perda de precisão por cancelamento quando \sqrt{1+x^{2}} e x são grandes e quase iguais (caso típico: x positivo e | x| grande). O objetivo é propor um procedimento numérico estável (relativamente) e justificar por que o erro relativo ficará da ordem do unit roundoff.

Passo 2

Entendendo o problema numérico: por que há perigo de erro grande?
Quando x é grande e positivo, \sqrt{1+x^{2}}\approx x+\dfrac{1}{2x}. Assim \sqrt{1+x^{2}}-x\approx\dfrac{1}{2x}, 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.

Passo 3

Truque algébrico (conjugado): multiplicar por \dfrac{\sqrt{1+x^{2}}+x}{\sqrt{1+x^{2}}+x}. Isso não muda o valor, mas transforma a expressão numa forma numericamente melhor quando há cancelamento:
\sqrt{1+x^{2}}-x =\frac{\bigl(\sqrt{1+x^{2}}-x\bigr)\bigl(\sqrt{1+x^{2}}+x\bigr)}{\sqrt{1+x^{2}}+x} =\frac{1}{\sqrt{1+x^{2}}+x}.
Portanto temos a identidade exata
f(x)=\sqrt{1+x^{2}}-x=\frac{1}{\sqrt{1+x^{2}}+x}.
Observe que a forma direita não contém subtração de dois termos grandes: é a recíproca de uma soma que, para x grande e positivo, é da ordem de 2x, 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 x\ge 0, compute f(x) como
f(x)=\frac{1}{\sqrt{1+x^{2}}+x},
porque aí \sqrt{1+x^{2}} e x são do mesmo sinal e próximos, e a forma direta \sqrt{1+x^{2}}-x cancela dígitos; a forma com o conjugado evita isso.
  • Se x<0, compute f(x) diretamente como
f(x)=\sqrt{1+x^{2}}-x,
porque nesse caso -x é 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 \mathrm{fl}(\cdot) denota o resultado em ponto flutuante e u é o unit roundoff (erro de arredondamento relativo máximo), então para operações binárias básicas \circ (adição, multiplicação, divisão) e para a função \sqrt{\cdot} podemos assumir, em termos simplificados, que o resultado satisfaz
\mathrm{fl}(a\circ b)=(a\circ b)(1+\delta),\qquad |\delta|\le c\,u,
onde c é uma pequena constante (geralmente pequeno como 1 ou 2, dependendo da operação). Para a raiz quadrada também vale um modelo similar: \mathrm{fl}(\sqrt{z})=\sqrt{z}\,(1+\delta) com |\delta|\le c'u. 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 u.

Passo 6

Análise do caso x\ge 0 usando a forma do conjugado:
Defina s=\sqrt{1+x^{2}}. No ponto flutuante vamos obter \widehat{s}=\mathrm{fl}(s) com
\widehat{s}=s(1+\delta_1),\qquad |\delta_1|\le c_1 u.
Em seguida computamos t=\widehat{s}+x (no dispositivo de ponto flutuante): o resultado será \widehat{t}=(\widehat{s}+x)(1+\delta_2) com |\delta_2|\le c_2 u. Por fim calculamos \widehat{f}=\mathrm{fl}(1/\widehat{t}), com
\widehat{f}=\frac{1}{\widehat{t}}(1+\delta_3),\qquad |\delta_3|\le c_3 u.
Juntando tudo, \widehat{f} é aproximadamente \dfrac{1}{s+x} multiplicado por 1+O(u). Portanto o erro relativo em \widehat{f} satisfaz
\frac{|\widehat{f}-f|}{|f|}=O(u),
isto é, da ordem do unit roundoff. Intuição: estamos calculando um recíproco de uma soma de ordem x (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 x<0 usando a forma direta:
Quando x<0, note que \sqrt{1+x^{2}}-x=\sqrt{1+x^{2}}+|x| é uma soma de dois termos positivos de ordem parecida — não há subtração entre quase-iguais. Assim, computando s=\sqrt{1+x^{2}} e depois \widehat{f}=\mathrm{fl}(\widehat{s}-x) (que é na prática \widehat{s}+|x|) a propagação do erro é estándar: a soma de dois números de mesma ordem introduz erro relativo da ordem de u. Logo novamente obtemos
\frac{|\widehat{f}-f|}{|f|}=O(u).

Passo 8

Observação sobre extremos de magnitude (overflow/underflow) e uma melhoria opcional:
  • Se |x| for gigantesco, calcular x^{2} pode overflowar antes de tirar a raiz. Uma técnica simples para evitar overflow é trabalhar com escala: escrever s=\sqrt{1+x^{2}}=|x|\sqrt{1+1/x^{2}} e computar \sqrt{1+1/x^{2}} quando |x| é tão grande que |x|^{2} pode causar overflow. Isso exige testar o tamanho de |x| 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 x\ge 0.

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 u. Isso responde o pedido: o algoritmo consiste em escolher a fórmula numericamente estável dependendo do sinal de x.

Resposta

Se x\ge 0: calcular
f(x)=\frac{1}{\sqrt{1+x^{2}}+x}.
Se x<0: calcular
f(x)=\sqrt{1+x^{2}}-x.
(Adicionar opcionalmente proteção contra overflow calculando \sqrt{1+x^{2}}=|x|\sqrt{1+1/x^{2}} quando |x| for muito grande.)

Exercícios relacionados