Buscar

Lista 1 - Representação de números aritmética de ponto flutuante

Prévia do material em texto

CA´LCULO NUME´RICO - Lista No. 1
Representac¸a˜o de nu´meros e aritme´tica de ponto flutuante
Prof. Daniel G. Alfaro Vigo
1. Expresse os nu´meros a seguir usando representac¸a˜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. Refac¸a o exerc´ıcio anterior usando apenas 3 d´ıgitos de precisa˜o (na˜o suponha limites para
o expoente).
3. Considere uma ma´quina com sistema de representac¸a˜o de nu´meros definido por: base 10,
precisa˜o de 6 d´ıgitos na mantissa e expoente no intervalo: [−6; 6]. Pede–se:
a) qual o menor e o maior nu´mero em mo´dulo representa´veis nesta ma´quina?
b) como sera´ representado o nu´mero 1892477 nesta ma´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 operac¸a˜o: a +
∑10
i=1 b,
considerando que esta´ sendo realizado o truncamento?
e) Repetir o item (d), para a operac¸a˜o:
∑10
i=1 b + a.
f) O que podemos concluir sobre a validade das propriedades como: comutativa, associa-
tiva, elemento neutro da adic¸a˜o de nu´meros em aritme´tica de ponto flutuante?
4. Para a equac¸a˜o quadra´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 sa˜o as ra´ızes exatas.
b) Use o software da sua prefereˆncia (Matlab, Scilab, GNU Octave, Mathematica, Python,
etc.) ou uma calculadora, para determinar as ra´ızes da equac¸a˜o acima mediante a fo´rmula
x1,2 =
−b±√b2 − 4ac
2a
,
quando q = 5, 11, 12 e 15.
c) Explique o desacordo entre os resultados aproximados e exatos.
d) Verifique que as fo´rmulas
x1 =
−b− s√b2 − 4ac
2a
, x2 =
c
ax1
,
onde s representa o sinal de b sa˜o va´lidas.
e) Use as fo´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 prefereˆncia, para obter uma tabela de nu´meros
com os resultados: k, k!, para k = 1, 2, 3, . . . , n. Este programa certamente resulta em
“overflow” para valores de n grande. Qual e´ este valor? Por queˆ?
6. Precisa˜o da Ma´quina
A precisa˜o da ma´quina e´ definida como sendo o menor nu´mero positivo em aritme´tica de
ponto flutuante, ε, tal que : (1 + ε) > 1. Este nu´mero depende totalmente do sistema
de representac¸a˜o da ma´quina: base nume´rica, total de d´ıgitos na mantissa, da forma
como sa˜o realizadas as operac¸o˜es e do compilador utilizado. E´ importante conhecermos
a precisa˜o da ma´quina porque em va´rios algoritmos precisamos fornecer como dado de
entrada um valor positivo, pro´ximo de zero para ser usado em testes de comparac¸a˜o com
zero.
O algoritmo abaixo estima a precisa˜o da ma´quina :
Passo 1 : A = 1
s = 1 + A
Passo 2 : Enquanto s > 1, fac¸a :
A = A/2
s = 1 + A
Passo 3 : Fac¸a Prec = A ∗ 2 e imprimir Prec .
a) Teste este algoritmo, na linguagem de sua prefereˆncia. Declare as varia´veis do programa
em precisa˜o simples e execute o programa; em seguida, declare as varia´veis em precisa˜o
dupla e execute novamente o programa.
b) Interprete o passo 3 do algoritmo, isto e´, por que a aproximac¸a˜o para Prec e´ escolhida
como sendo o dobro do u´ltimo valor de A obtido no passo 2?
c) Na definic¸a˜o de precisa˜o da ma´quina, usamos como refereˆncia o nu´mero 1. No algoritmo
abaixo a varia´vel ω e´ um dado de entrada, escolhido pelo usua´rio:
Passo 1 : A = 1
s = ω + A;
Passo 2 : Enquanto s > ω, fac¸a :
A = A/2
s = ω + A
Passo 3 : Fac¸a Prec = A ∗ 2 e imprimir Prec .
c.1) Teste seu programa atribuindo para ω os nu´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 ω e´ modificado.
7. Ca´lculo de exp(x)
O objetivo e´ calcular exp(x) pela fo´rmula de Taylor ate´ ordem n em torno de zero:
exp(x) ≈ 1 + x + x
2
2!
+
x3
3!
+
x4
4!
+ · · ·+ x
n
n!
a) Escreva um programa numa linguagem da sua escolha para obter a aproximac¸a˜o para
exp(x) usando a fo´rmula de Taylor. O valor de x e o nu´mero de termos da se´rie, n, sa˜o
dados de entrada deste programa.
Observe que o ca´lculo do fatorial: k!, necessa´rio na se´rie de Taylor, pode ser feito de
2
modo a evitar o ocorreˆncia de overflow. Para isso o termo k-e´simo pode ser escrito como:
xk/k! = xk−1/(k − 1)! ∗ (x/k), onde o fator xk−1/(k − 1)! ja´ esta´ calculado, pois a se´rie
esta´ sendo avaliada a partir do primeiro termo. (Um erro comum no uso da fo´rmula de
Taylor para o ca´lculo de exp(x) e´ escrever algum “procedimento” auxiliar para avaliar
o fatorial.) Evitando o overflow a se´rie de Taylor pode ser calculada com tantos termos
quanto se queira. Qual seria um crite´rio de parada para se interromper o ca´lculo da se´rie,
que na˜o seja a comparac¸a˜o com o valor exato de exp(x)?
b) Teste seu programa com va´rios valores para x: positivos, negativos, (x ≈ 0 e x distante
de zero) e, para cada valor de x, teste o ca´lculo da se´rie com va´rios valores para o nu´mero
de termos: n. Analise os resultados obtidos.
8. Acesse o site www.math.psu.edu/dna/disasters/ onde esta˜o relatados tres casos reais
nos quais houve um desastre ou acidente provocado por erros em aritme´tica de ponto
flutuante. Escolha um, fac¸a uma ana´lise e comenta´rios. Outra pa´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 va´rios sites que podem ser consultados,
dentre eles:
www.cs.berkeley.edu/~wkahan
E apenas como curiosidade, pode-se ter uma ide´ia das ma´quinas com a maior capacidade
computacional do mundo; essa lista esta´ dispon´ıvel no site www.top500.org.
Utilidades:
Conversor de base http://wims.unice.fr/wims/
Python Homepage Scilab Homepage (software livre para programac¸a˜o nume´rica
Iniciac¸a˜o ao Scilab (pdf em portugueˆs, autor: Prof. Lu´ıs Soares Barreto)
Tutoriais de Matlab: http://www.math.mtu.edu/~msgocken/intro/intro.html (em ingleˆs),
http://w3.impa.br/~zubelli/tutorial/ (em portugueˆs).
3

Continue navegando