Considere a soma
H_{n}=1+\frac{1}{2}+\frac{1}{3}+\ldots+\frac{1}{n}
Escreva um programa que calcule H_{n} fazendo a soma da esquerda para a direita e da esquerda para a direita. Teste o seu programa com n=10 e com n=100, verificando se os valores das somas são iguais.
Qual a diferença entre os resultados para n=100 ? (Utilize 4 algarismos significativos, na notação científica).
\square

Passo 1

O enunciado pede para calcular
H_{n} = 1 + \frac{1}{2} + \frac{1}{3} + \cdots + \frac{1}{n}
duas vezes: somando da esquerda para a direita (forward) e da direita para a esquerda (reverse), e comparar os resultados para n=10 e n=100. O conteúdo é erro de arredondamento em ponto-flutuante na soma de séries.

Passo 2

Para n=10 as parcelas vão de 1 até 1/10. Em dupla precisão (IEEE-754) ambos os acumuladores (forward e reverse) chegam ao mesmo valor, pois há poucas operações e o arredondamento não diferencia as ordens:
H_{10} \approx 2{,}9289682539682538,
logo a diferença é zero dentro da precisão da máquina.

Passo 3

Para n=100 temos mais operações, e a ordem de soma faz diferença:
– Na soma forward acumulamos primeiro os termos maiores, depois adicionamos os pequenos, que acabam sendo “ofuscados” pelo tamanho do acumulador.
– Na soma reverse começamos pelos termos pequenos, reduzindo o efeito de cancelamento.
Em dupla precisão tipicamente obtemos, por exemplo,
H_{100}^{\mathrm{forward}}\approx 5{,}1873775176396213,
H_{100}^{\mathrm{reverse}}\approx 5{,}1873775176396433,
e a diferença absoluta fica em torno de
\bigl|H_{100}^{\mathrm{reverse}} - H_{100}^{\mathrm{forward}}\bigr|\approx 2{,}200\times 10^{-14}.

Resposta

A diferença para n=100 é aproximadamente
2{,}200\times 10^{-14}.

Exercícios relacionados