Números reais

Tópicos

Introdução

Um número real em um computador é representado na notação de ponto flutuante (do inglês floating point). Dada a limitação de dígitos imposta por essa notação, os resultados dos cálculos realizados pelos computadores são aproximações dos valores reais. Por exemplo, o valor real de Pi tem infinitas casas decimais mas, no computador, é necessário limitar o número de casas decimais, aproximando o valor de Pi.

Para que possamos confiar nos resultados, uma boa prática é tentar minimizar a propagação de erros devido ao uso dessas aproximações. Assim, em geral:

  • Operações de divisão e multiplicação são “seguras”, podem ser executadas em qualquer ordem.

  • 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.

Se você já aprendeu a utilizar funções, você pode escrever as soluções dos problemas a seguir usando funções.

Problema 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

\[H_n = 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{4} + \ldots + \frac{1}{n}\]

Imprima cada termo da sequência e o resultado final. Faça 2 implementações:

    1. Da direita para a esquerda e

    1. da esquerda para direita.

Qual dessas formas é estável?

Observe que para \(n = 10\), os resultados são iguais, mas para \(n = 100 \ldots\)

Problema 2

Nota: Questão 6 da lista de exercícios sobre reais do caderno de exercícios.

Dados \(x\) real e \(n\) natural, calcular uma aproximação para \(\cos(x)\) através dos \(n\) primeiros termos da seguinte série

\[\cos(x) = 1-\frac{x^2}{2!}+\frac{x^4}{4!}-\frac{x^6}{6!}+\ldots+(-1)^k \frac{x^{2k}}{2k!} + \ldots\]

Compare com os resultados de sua calculadora!

Problema 3

Nota: Questão 7 da lista de exercícios sobre reais do caderno de exercícios.

Dados \(x\) real e \(\epsilon\) real, \(\epsilon > 0\), calcular uma aproximação para \(\sin(x)\) através da seguinte série infinita:

\[\sin(x) = \frac{x}{1!}-\frac{x^3}{3!}+\frac{x^5}{5!}+\ldots+(-1)^k \frac{x^{2k+1}}{(2k+1)!} + \ldots\]

incluindo todos os termos até que \(\frac{|x^{2k+1}|}{(2k+1)!} < \epsilon\)

Compare com os resultados de sua calculadora!

Problema 4

Nota: Questão 1 da Prova 1 de 2014.

Na figura, no plano cartesiano, a região sombreada não inclui as linhas de bordo. Note que o eixo y cai bem no meio da figura, e usamos o lado do quadrado para indicar as ordenadas correspondentes.

Escreva na página do desenho um programa que lê as coordenadas cartesianas (x, y) de um ponto, ambas do tipo float e imprime dentro se esse ponto está na região, e fora caso contrário.

_images/face.png
Clique
  • aqui para ver uma 1a solução.

  • aqui para ver uma 2a solução.

  • aqui para ver uma 3a solução.

  • aqui para ver uma 4a solução.

  • aqui para ver uma 5a solução.

  • aqui para ver uma 6a solução.

Problema 5

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:

\[e^x = 1 + x + \frac{x^2} {2!} + \frac{x^3}{3!} + \ldots + \frac{x^k}{k!} + \ldots\]

Inclua na aproximação todos os termos até o primeiro de valor absoluto (módulo) menor do que epsilon.

Problema 6

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}\).

Next Section - Funções