Perda de dígitos (II)
O perigo da somar números distantes
Vamos lá?
Na aula passada vimos um exemplo do perigo que pode ser subtrair número próximos. Nesta aula veremos um segundo exemplo, onde não há nenhuma subtração. Será que estaremos em segurança então?
- 1
- 2
Se e , podemos dizer que...
O exemplo do vídeo é para mostrar que a perda de dígitos significativos não aparece apenas quando temos cancelamento pela subtração de números próximos. Vamos analisar o que aconteceu no vídeo.
Seja
Assim, o algoritmo abaixo estima
- enquanto
repita:
Acontece que a medida que
Neste gráfico (em escala logarítmica) a curva em preto representa o valor que está acumulado na variável
A estratégia para evitar esta disparidade de grandezas é trocar a ordem com que a soma é feita.
- enquanto
repita:
Neste segundo algoritmo, o valor de
Para poder fazer esses experimentos nos Octave é necessário definir a variável s
como sendo de precisão simples. Por exemplo, o primeiro algoritmo, traduzido para linguagem do Octave, ficaria assim:
N = 4096; s = single(0); k = 1; while (k <= N) s = s + (1/k^2); k = k + 1; endwhile
Com este exemplo mostramos que, em um sistema de ponto flutuante, ao somar números de grandezas muito distintas os dígitos do número menos significativo podem acabar por serem descartados e não influenciar o resultado. Enquanto que para uma única soma isso não tem muita influência, afinal os dígitos que são preservados são os mais significativos mesmo, em um processo acumulativo isso pode ser desastroso. Isto porque os dígitos perdidos em cada soma, se acumulados, poderiam ser significativos para o resultado final. Neste exemplo, foi possível trocar a ordem com que as operações eram feitas. Em outros casos isto pode não ser tão simples.
1. Rode os dois algoritmos descritos no texto, usando o Octave (ou o Octave-Online). Experimente trocar a instrução while
por for
.
2. Considerando o SPF
(a)
3. Trabalhando em precisão dupla, ainda haveria diferença no desempenho do algoritmo do exemplo que acumula os termos na ordem direta daquele que acumula na ordem reversa? Faça um experimento numérico para justificar sua conjectura.