Você está na página 1de 3

C ÁLCULO NUMÉRICO

- Cap. 2: Erros Numéricos -

1. Expresse os números a seguir usando representação em ponto flutuante normalizada na


base indicada:
a) (5, 987)10
b) (630)10
c) (0, 000000512)10
d) (1111)2
e) (10, 11)2
f) (0, 0001000)2
2. Refaça o exercı́cio anterior usando apenas 3 dı́gitos de precisão (não suponha limites para
o expoente).
3. Considere uma máquina com sistema de representação de números definido por: base 10,
precisão de 6 dı́gitos na mantissa e expoente no intervalo: [−6; 6]. Pede–se:
a) qual o menor e o maior número em módulo representáveis nesta máquina?
b) como será representado o número 1892477 nesta máquina se for usado o arredonda-
mento? E se for usado o truncamento?
c) Se a = 257820 e b = 0.6 qual o resultado de a + b se for usado o arredondamento? E
se for usado o truncamento? Justifique o resultado.
d) Considerando ainda, a = 257820 e b = 0.6, qual o resultado da operação: a + 10
P
i=1 b,
considerando que está sendo realizado o truncamento?
e) Repetir o item (d), para a operação: 10
P
i=1 b + a.
f ) O que podemos concluir sobre a validade das propriedades como: comutativa, associa-
tiva, elemento neutro da adição de números em aritmética de ponto flutuante?
4. Para a equação quadrática 10−q x2 − (1.4 + 2.5 × 10−q ) x + 3.5 = 0.
a) Verifique que x1 = 1.4 × 10q e x2 = 2.5 são as raı́zes exatas.
b) Use o software da sua preferência (Matlab, Scilab, GNU Octave, Mathematica, Python,
etc.) ou uma calculadora, para determinar as raı́zes da equação acima mediante a fórmula

−b ± b2 − 4ac
x1,2 = ,
2a
quando q = 5, 11, 12 e 15.
c) Explique o desacordo entre os resultados aproximados e exatos.
d) Verifique que as fórmulas

−b − s b2 − 4ac c
x1 = , x2 = ,
2a ax1
onde s representa o sinal de b são válidas.
e) Use as fórmulas acima para obter as raı́zes para os mesmos valores de q. Explique o
resultado.

1
5. Escreva um programa, na linguagem de sua preferência, para obter uma tabela de números
com os resultados: k, k!, para k = 1, 2, 3, . . . , n. Este programa certamente resulta em
“overflow” para valores de n grande. Qual é este valor? Por quê?
6. Precisão da Máquina
A precisão da máquina é definida como sendo o menor número positivo em aritmética de
ponto flutuante, ε, tal que : (1 + ε) > 1. Este número depende totalmente do sistema
de representação da máquina: base numérica, total de dı́gitos na mantissa, da forma
como são realizadas as operações e do compilador utilizado. É importante conhecermos
a precisão da máquina porque em vários algoritmos precisamos fornecer como dado de
entrada um valor positivo, próximo de zero para ser usado em testes de comparação com
zero.
O algoritmo abaixo estima a precisão da máquina :
Passo 1 : A = 1
s=1+A
Passo 2 : Enquanto s > 1, faça :
A = A/2
s=1+A
Passo 3 : Faça P rec = A ∗ 2 e imprimir P rec .
a) Teste este algoritmo, na linguagem de sua preferência. Declare as variáveis do programa
em precisão simples e execute o programa; em seguida, declare as variáveis em precisão
dupla e execute novamente o programa.
b) Interprete o passo 3 do algoritmo, isto é, por que a aproximação para Prec é escolhida
como sendo o dobro do último valor de A obtido no passo 2?
c) Na definição de precisão da máquina, usamos como referência o número 1. No algoritmo
abaixo a variável ω é um dado de entrada, escolhido pelo usuário:
Passo 1 : A = 1
s = ω + A;
Passo 2 : Enquanto s > ω, faça :
A = A/2
s=ω+A
Passo 3 : Faça P rec = A ∗ 2 e imprimir P rec .
c.1) Teste seu programa atribuindo para ω os números : 10−1 , 10−4 , 10−8 , 10, 17, 100,
184, 1000, 1575, 10000, 17893.
c.2) Para cada valor diferente para ω imprima o valor correspondente obtido para Prec.
Justifique por que Prec se altera quando ω é modificado.
7. Cálculo de exp(x)
O objetivo é calcular exp(x) pela fórmula de Taylor até ordem n em torno de zero:
x 2 x3 x4 xn
exp(x) ≈ 1 + x + + + + ··· +
2! 3! 4! n!
a) Escreva um programa numa linguagem da sua escolha para obter a aproximação para
exp(x) usando a fórmula de Taylor. O valor de x e o número de termos da série, n, são
dados de entrada deste programa.
Observe que o cálculo do fatorial: k!, necessário na série de Taylor, pode ser feito de

2
modo a evitar o ocorrência de overflow. Para isso o termo k-ésimo pode ser escrito como:
xk /k! = xk−1 /(k − 1)! ∗ (x/k), onde o fator xk−1 /(k − 1)! já está calculado, pois a série
está sendo avaliada a partir do primeiro termo. (Um erro comum no uso da fórmula de
Taylor para o cálculo de exp(x) é escrever algum “procedimento” auxiliar para avaliar
o fatorial.) Evitando o overflow a série de Taylor pode ser calculada com tantos termos
quanto se queira. Qual seria um critério de parada para se interromper o cálculo da série,
que não seja a comparação com o valor exato de exp(x)?
b) Teste seu programa com vários valores para x: positivos, negativos, (x ≈ 0 e x distante
de zero) e, para cada valor de x, teste o cálculo da série com vários valores para o número
de termos: n. Analise os resultados obtidos.

8. Acesse o site www.math.psu.edu/dna/disasters/ onde estão relatados tres casos reais


nos quais houve um desastre ou acidente provocado por erros em aritmética de ponto
flutuante. Escolha um, faça uma análise e comentários. Outra página interessante sobre
erros se encontra no link:
http://wwwzenger.informatik.tu-muenchen.de/persons/huckle/bugse.html
Para saber mais sobre ponto flutuante, existem vários sites que podem ser consultados,
dentre eles:
www.cs.berkeley.edu/~wkahan
E apenas como curiosidade, pode-se ter uma idéia das máquinas com a maior capacidade
computacional do mundo; essa lista está disponı́vel no site www.top500.org.

Utilidades:
Conversor de base http://wims.unice.fr/wims/
Python Homepage Scilab Homepage (software livre para programação numérica
Iniciação ao Scilab (pdf em português, autor: Prof. Luı́s Soares Barreto)

Tutoriais de Matlab: http://www.math.mtu.edu/~msgocken/intro/intro.html (em inglês),


http://w3.impa.br/~zubelli/tutorial/ (em português).

Tutorial de Fortran: http://http://www.fortrantutorial.com (em inglês),