A série infinita
f(n)=\sum_{i=1}^{n} \frac{1}{i^{4}}
converge para um valor f(n)=\pi^{4} / 90 quando n tende a infinito. Escreva um programa em precisão simples para calcular f(n) para n=10.000, calculando a soma de i=1 a 10.000 . A seguir, repita os cálculos, mas na ordem inversa isto é, de i=10.000 até 1 usando incrementos de -1 . Em cada caso, calcule o erro relativo percentual verdadeiro. Explique os resultados.

Passo 1

O que o enunciado pede e o que é dado:
  • Pede-se calcular a soma finita f(n)=\sum_{i=1}^{n}\frac{1}{i^{4}}com n=10.000 usando aritmética em precisão simples (float, 32 bits), de duas maneiras:
    1. somando em ordem direta: i=1,2,\dots,10000;
    2. somando em ordem inversa: i=10000,9999,\dots,1.
  • Em cada caso, pede-se calcular o erro relativo percentual verdadeiro, tomando como valor “verdadeiro” o limite S=\frac{\pi^{4}}{90}.
  • Informação útil (valor verdadeiro): S=\frac{\pi^{4}}{90}\approx 1,082323233711138.

Passo 2

Breve aula sobre ponto-flutuante (precisão simples) e por que a ordem importa
  • Representação: em precisão simples (IEEE 754, 32 bits) um número é aproximado por \pm (1.m)\times2^{e} com 23 bits de fração. Isso dá aproximadamente 24 bits de precisão efetiva (incluindo o 1 implícito), ou cerca de 7 dígitos decimais significativos.
  • Machine epsilon (definição prática): o menor número \varepsilon tal que 1+\varepsilon \ne 1 em float é \varepsilon \approx 2^{-23}\approx 1{,}1920929\times10^{-7}.
  • Consequência para soma de termos positivos: ao somar um termo muito pequeno t a um acumulador A, se t for menor que algo da ordem de \varepsilon\cdot A, então A+t será arredondado para A (o incremento é perdido). Em outras palavras, acrescentos menores que cerca de meia-ulp serão descartados pelo arredondamento.
  • Para a série \sum 1/i^{4} isso significa que quando o acumulador já estiver da ordem de A\sim 1, termos com 1/i^{4}\lesssim\varepsilon serão efetivamente ignorados. Vamos estimar para qual i isso sucede no Passo 5.
  • Intuição sobre ordem: somar termos pequenos primeiro (da menor para a maior) permite que esses pequenos termos acumulem entre si antes do acumulador crescer, preservando a contribuição total. Somar do maior para o menor faz com que muitos termos muito pequenos sejam adicionados a um acumulador grande e, por isso, se percam por arredondamento.

Passo 3

Como implementar em precisão simples (exemplo em C)
  • Pseudocódigo / código em C (usar tipo float, constantes com sufixo f):
#include <stdio.h>
#include <math.h>

int main(void) {
    const int N = 10000;
    float sum_forward = 0.0f;
    for (int i = 1; i <= N; ++i) {
        float t = 1.0f / ( (float)i * (float)i * (float)i * (float)i );
        sum_forward += t;
    }

    float sum_reverse = 0.0f;
    for (int i = N; i >= 1; --i) {
        float t = 1.0f / ( (float)i * (float)i * (float)i * (float)i );
        sum_reverse += t;
    }

    float S_true = (float)( (M_PI*M_PI*M_PI*M_PI) / 90.0 ); /* cuidado: M_PI em double; aqui estamos convertendo para float */
    /* Melhor: calcular S_true em double e depois fazer (float) para comparar em float. */

    printf("sum_forward = %.8f\n", sum_forward);
    printf("sum_reverse = %.8f\n", sum_reverse);
    printf("S_true (double->float) = %.8f\n", S_true);
    return 0;
}
  • Observações práticas:
    • Forçar cálculos em float: use literais com sufixo f e converta i explicitamente para float antes de elevar.
    • Quando se imprime, usar formato que mostra dígitos suficientes (por exemplo %.8f) para visualizar a precisão de float.
    • Comparar cada soma com S convertido para float: isso dá o “erro verdadeiro” relativo na escala da precisão simples.

Passo 4

Estimativa teórica do comportamento (por que um deles é muito melhor)
  • Vamos encontrar i_{0} tal que 1/i_{0}^{4}\approx \varepsilon. Tomando \varepsilon\approx 2^{-23} tem-se i_{0}\approx \varepsilon^{-1/4}=2^{23/4}=2^{5{,}75}\approx 53{,}8\approx 54.
  • Interpretação: quando o acumulador estiver por volta de A\sim 1, termos com i\gtrsim 54 são menores que \varepsilon e correm o risco de ser perdidos ao somá-los a A.
  • Consequência prática:
    • Somando em ordem direta (do maior termo para o menor: i=1 até 10000), o acumulador atinge A\sim 1 rapidamente (já depois de poucas dezenas de termos) e quase todos os termos com i\gtrsim 54 passarão a ser negligenciados quando adicionados — o efeito é que a soma fica praticamente igual à soma parcial até i\approx 54.
    • Somando em ordem inversa (dos menores para os maiores: i=10000 até 1), os termos pequenos se acumulam entre si inicialmente, crescendo o acumulador gradualmente; muitos desses termos não serão perdidos porque o acumulador, enquanto pequeno, representa bem incrementos comparáveis a eles. Depois, quando o acumulador atingir valores maiores, grande parte da contribuição dos termos pequenos já foi incorporada.

Passo 5

Estimativa numérica do erro causado por “perda” dos termos pequenos (ordem direta)
  • Podemos estimar a contribuição total dos termos com i\ge I usando uma aproximação integral: \sum_{i=I}^{\infty}\frac{1}{i^{4}}\approx \int_{I-1}^{\infty}\frac{dx}{x^{4}}=\frac{1}{3(I-1)^{3}}.
  • Tomando I\approx 54 (valor onde um termo individual fica da ordem de \varepsilon), a sobra (o “tail” perdido na soma direta) é aproximadamente T\approx\frac{1}{3\cdot 53^{3}}\approx\frac{1}{3\cdot148877}\approx 2{,}24\times 10^{-6}.(usando I-1=53). Se usar I=54 diretamente, temos T\approx\frac{1}{3\cdot54^{3}}\approx 2{,}12\times10^{-6}.
  • Esse é um valor do mesmo da ordem de 10^{-6}. Comparado ao valor verdadeiro S\approx 1{,}082323, a fração relativa perdida é da ordem de 10^{-6}, ou seja, \sim 10^{-4}\%.
  • Conclusão: a soma direta pode perder cerca de 2\times10^{-6} em valor absoluto, o que corresponde a um erro relativo da ordem de 2\times10^{-6}/1{,}0823\approx 1{,}9\times10^{-6}, isto é, cerca de 0{,}00019\%.

Passo 6

Resultados numéricos esperados em precisão simples e cálculo do erro relativo percentual verdadeiro
  • Valor verdadeiro: S=\frac{\pi^{4}}{90}\approx 1{,}082323233711138.
  • Estimativas (comportamento típico de float quando se soma com as duas ordens):
    • Soma em ordem direta ( i=1 a 10000 ) tende a perder a contribuição do “caldo” de termos pequenos. Uma estimativa razoável para a soma em float é f_{\text{forward}}\approx 1{,}0823211.Diferença absoluta aproximada: \Delta_{\text{forward}}=S-f_{\text{forward}}\approx 2{,}12\times10^{-6}.Erro relativo verdadeiro: \text{erro\_rel\_forward}=\frac{\Delta_{\text{forward}}}{S}\approx 1{,}96\times10^{-6}.Em porcentagem: \text{erro\_percent\_forward}\approx 0{,}000196\%.
    • Soma em ordem inversa ( i=10000 a 1 ) preserva muito melhor a contribuição dos termos pequenos. O resultado em float costuma ficar praticamente arredondado corretamente ao valor representável mais próximo: f_{\text{reverse}}\approx 1{,}0823232.Diferença absoluta aproximada: \Delta_{\text{reverse}}=S-f_{\text{reverse}}\approx 3{,}4\times10^{-8}.Erro relativo verdadeiro: \text{erro\_rel\_reverse}=\frac{\Delta_{\text{reverse}}}{S}\approx 3{,}1\times10^{-8}.Em porcentagem: \text{erro\_percent\_reverse}\approx 0{,}0000031\%.
  • Interpretação numérica: a soma em ordem inversa é cerca de duas ordens de magnitude mais precisa (em termos relativos) do que a soma em ordem direta no contexto da precisão simples.

Passo 7

Explicação final e conselho prático para a prova
  • Por que a ordem inversa é melhor: somar os termos menores primeiro evita que eles sejam somados a um acumulador grande (onde seriam arredondados a zero). Assim, a ordem inversa permite que as pequenas contribuições “cresçam” e sejam representadas com mais precisão antes que o acumulador atinja valores maiores.
  • Regra prática que dá para usar na prova: quando somar uma série (ou somar muitos números) em ponto flutuante, some do menor para o maior (ou use algoritmos de soma compensada, como Kahan) para reduzir erro de arredondamento.
  • No enunciado pediam especificamente precisão simples; se puder usar precisão dupla (double) o problema praticamente desaparece porque o limite onde termos são perdidos fica muito maior (ε é muito menor).

Resposta

f_{\text{forward}}\approx 1,0823211 (erro relativo percentual verdadeiro \approx 0,000196\%)
f_{\text{reverse}}\approx 1,0823232 (erro relativo percentual verdadeiro \approx 0,0000031\%)

Exercícios relacionados