Aula 14/24 - Mais sobre números reais¶
Tópicos¶
Números reais e os problemas com o tipo float
- Em geral:
Operações de divisão e multiplicação são “seguras”
Adições e subtrações são “perigosas”, pois quando números de magnitudes muito diferentes são envolvidos, os dígitos menos significativos são perdidos.
Essa perda de dígitos pode ser inevitável e sem consequência (quando os dígitos perdidos são insignificantes para o resultado final) ou catastróficos (quando a perda é magnificada e causa um grande erro no resultado).
Quanto mais cálculos são realizados (em particular quando os cálculos são feitos de forma iterativa), mais importante é considerar esse problema.
O método de cálculo pode ser estável (tende a reduzir os erros de arredondamento) ou instável (tende a magnificar os erros). Frequentemente, há soluções estáveis e instáveis para um problema.
Para saber mais dê uma olhada em http://floating-point-gui.de/errors/propagation.
Exercícios¶
Exercício 14.1¶
(exercício 2 da lista de exercícios sobre reais). Dado um número inteiro \(n > 0\), determinar o número harmônico \(H_n\) dado por
Imprima cada termo da sequência e o resultado final. Faça 2 implementações:
Da direita para a esquerda e
da esquerda para direita.
Qual dessas formas é estável?
Observe que para \(n = 10\), os resultados são iguais, mas para \(n = 100 \ldots\)
Exercício 14.2¶
Dado um número real \(x\) e um número real \(\text{epsilon} > 0\), calcular uma aproximação de \(e^x\) através da seguinte série infinita:
Inclua na aproximação todos os termos até o primeiro de valor absoluto (módulo) menor do que epsilon.
Exercício 14.3¶
- Dados números reais \(x >= 0\) e \(\text{epsilon} > 0\), calcular uma aproximação da raiz quadrada de \(x\) através da seguinte sequência:
\(r_0 = x\) e
\(r_{n+1} = (r_n+ \frac{x}{r_n}) / 2\).
- Exemplos:
Para \(x = 3, r_0 = 3, r_1 = 2, r_2 = 1.75, r_3 = 1.732143, r_4 = 1.732051\)
Para \(x = 4, r_0 = 4, r_1 = 2.5, r_2 = 2.05, r_3 = 2.000610, r_4 = 2.000000\)
Para \(x = 5, r_0 = 5, r_1 = 3, r_2 = 2.33, r_3 = 2.238095, r_4 = 2.236068\)
Para \(x = 0.81, r_0=0.81, r_1=0.905, r_2=0.9000138122, r_3=0.9000000001\)
A aproximação será o primeiro valor \(r_{n+1}\) tal que \(|r_{n+1}-r_n| < \text{epsilon}\).