Escolar Documentos
Profissional Documentos
Cultura Documentos
Agosto de 2016
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 1 / 95
Introduo
Computao numrica uma parte vital da infraestrutura
tecnolgica e cientca da atualidade.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 2 / 95
Introduo
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 3 / 95
Introduo
A partir do sc. XVI, o sistema decimal se tornou base em toda a
Europa.
O prximo grande avano foi a tabulao de logaritmos por John
Napier no incio do sc. XVII.
Com logaritmos possvel substituir divises e multiplicaes por
subtraes e adies.
Isaac Newton e Leibniz desenvolveram o clculo no sc. XVII e
tcnicas numricas para a soluo de vrios problemas.
Outros grandes matemticos, tais como Euler, Lagrange, Gauss
foram responsveis por grandes desenvolvimentos na computao
numrica.
Um outro dispositivo utilizado foi a rgua de deslizamento at a
dcada de 70 do sculo passado.
Dispositivos mecnicos para clculo foram inventados por
Schickard, Pascal e Leibniz.
Charles Babbage iniciou o desenvolvimento de equipamentos sem
interveno humana.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 4 / 95
Introduo
Durante Segunda Guerra Mundial houve um grande
desenvolvimento de dispositivos para clculos, e pode-se armar
que mais ou menos nessa poca comeou-se a era da computao.
Uma das primeiras mquinas consideradas como computador foi o
Z3, construdo pelo engenheiro Konrad Zuse na Alemanha entre os
anos de 1939 e 1941. O Z3 usava dispositivos eletromecnicos e j
empregava nmeros binrios de ponto utuante.
O governo britnico desenvolveu nessa mesma poca um
dispositivo eletrnico chamado Colossus usado para decodicar
mensagens secretas.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 6 / 95
Introduo
Os dois principais cientistas que inuenciaram os padres de
desenvolvimento dos dispositivos computacionais foram Alan Turin
e John von Neumann.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 7 / 95
Introduo
Durante a dcada de 1950, o principal uso dos computadores foi
para computao numrica.
A partir de 1960, os computadores passaram a ser usados em
empresas para processar informao, tais como, texto e imagem.
Usurios frequentemente no esto cientes de que a manipulao
de texto, som ou imagem envolve computao numrica.
Os computadores so usados para resolver equaes que modelam
os mais diferentes sistemas: da expanso do universo
micro-estrutura do tomo; processamento de imagens e anlise
estatstica de dados mdicos; predio de clima; simulao de
circuitos para projetos de computadores menores e mais rpidos;
modelagem de aeronaves para testes e treinamento de pilotos;
conabilidade de sistemas eltricos.
Os resultados numricos so comparados com os resultados
experimentais.
Em sntese: todas reas da cincia e engenharia utilizam
fortemente a computao numrica.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 8 / 95
Os nmeros reais
Os nmeros reais so representados por uma linha.
1/2 2 e
-2 -1 0 1 2 3 4
Denition 1
O sistema de nmeros real estendido consiste do campo real R e dois
smbolos: + e . Preserva-se a ordem original em R, e dene-se
+ < x <
Exerccio 1
Mostre que os nmeros racionais so contveis. Dica: utilize uma
tabela e faa uso da diagonal.
Exerccio 2
Mostre que 2 um nmero irracional.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 11 / 95
Os nmeros reais
O sistema decimal requer 10 smbolos (0 a 10). A escolha
pautada em funo do nmero de dedos.
Um bit pode ser visto como um entidade fsica que est ligado ou
desligado. Em eletrnica sabemos que o bit representado por um
nvel de tenso baixo ou alto.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 12 / 95
Os nmeros reais
O nmero (71)10 = 7 10 + 1 tem sua representao binria como
(1000111)2 = 1 64 + 0 32 + 0 16 + 0 8 + 1 4 + 1 2 + 1 1.
O nmero fracionrio pode ser representado, tal como
11 1
= (5,5)10 = 5 1 + 5
2 10
e
11 1
= (101.1)2 = 1 4 + 0 2 + 1 1 + 1 .
2 2
Nmeros irracionais possuem expanso decimal e binria innita e
sem repetio.
Exerccio 3
1
Faa a transformao de
10 para o sistema binrio.
Exerccio 4
Faa a expanso decimal e binria dos seguintes nmeros: 2, , e.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 13 / 95
Representao Computacional de Nmeros
Qual a melhor maneira de representar nmeros em um
computador?
00000000000000000000000001000111.
Exerccio 5
Qual o nmero mnimo de bits necessrios para representar o nmero
50000?
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 14 / 95
Representao Computacional de Nmeros
necessrio representar nmeros positivos e negativos.
232 y.
Exerccio 6
Coloque o nmero 71 na forma binria de complemento de 2.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 15 / 95
Representao Computacional de Nmeros
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 16 / 95
Representao Computacional de Nmeros
Nmeros racionais podem ser representados por pares de inteiros:
o numerador e denominador.
Esta representao precisa, mas inconveniente do ponto de
vista aritmtico.
Sistemas que representam os nmeros racionais dessa forma tem
sido chamados de simblicos.
Para a maioria dos casos, os nmeros reais, entretanto, so
armazenados usando representao binria.
H dois mtodos: ponto xo e ponto utuante.
Ponto xo: 1 bit para o sinal, um grupo de bits para representar o
nmero antes do ponto binrio e um grupo de bits para representar
o nmero aps o ponto binrio.
Exemplo 2
Para uma preciso de 32 bits o nmero 11/2 pode ser representado
como
|0|000000000000101|1000000000000000|.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 17 / 95
Representao Computacional de Nmeros
Exerccio 7
Represente o nmero 1/10 na representao binria de ponto xo com
32 bits.
1
Anoop, C. V. and Betta, C. Comparative Study of Fixed-Point and Floating
Code for a Fixed-Point Micro. dSPACE User Conference - India, 2012.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 18 / 95
Representao Computacional de Nmeros
Ponto utuante baseado na notao exponencial ou cientca.
Exemplo 3
A representao exponencial de 0,00036525 3,6525 104 .
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 19 / 95
Representao Computacional de Nmeros
A expanso binria do signicante
Exerccio 8
O nmero 11/2 representado como
11
= (1,011)2 22 .
2
Os bits aps o ponto binrio so chamados de parte fracionria do
signicando.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 20 / 95
Representao Computacional de Nmeros
Exemplo 4
Um sistema de 32 bits pode ser dividido nos seguintes campos: 1 bit
para o sinal, 8 para para o expoente e 23 bits para o signicante.
Exemplo 5
O nmero 71 representado por (1.000111)2 26 e armazenado
Exemplo 6
Considere o nmero 1/10, cuja expanso
1
= (0,0001100110011 . . .)2 .
10
Primeiro devemos normalizar e em seguida truncar. Assim a
representao de 1/10
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 22 / 95
Representao Computacional de Nmeros
A preciso (p) de um sistema de ponto utuante o nmero de
bits do signicante (incluindo o bit escondido).
No sistema de 32 bits, p = 24, sendo 23 bits no signicante e 1 bit
escondido.
Um ponto utuante normalizado com preciso p expresso por
E
x = (1,b1 b2 . . . bp2 bp1 )2 2 . (3)
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 23 / 95
Representao Computacional de Nmeros
Ulp abreviao de unit in the last place ou unidade da ltima
posio.
Se x>0 ento ulp(x) a distncia entre x e o prximo maior
ponto utuante maior.
Se x<0 ento ulp(x) a distncia entre x e o prximo menor
ponto utuante.
Exerccio 9
Seja a preciso p = 24 tal que = 223 . Determine ulp(x) para x igual
aos seguintes valores: a) 0,25; b) 2; c) 3; d) 4; e) 10; f ) 100; g) 1030. D
sua resposta em potncia de 2.
(b0 b1 b2 )2 2E ). (6)
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 25 / 95
Representao Computacional de Nmeros
A preciso de (6) p = 3.
O maior nmero (1,11)2 21 = (3,5)10 .
O menor nmero positivo (1,00)2 21 = (0,5)10 .
O ponto utuante seguinte ao nmero 1 1,25, assim = 0,25.
A distncia entre cada nmero dada por
ulp(x) = 2E .
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 26 / 95
Representao IEEE
Ponto utuante usado desde meados da dcada de 1950.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 27 / 95
Representao IEEE
Em uma colaborao entre pesquisadores e projetistas de
microprocessadores, um padro para representao de ponto
utuante e aritmtica foi desenvolvido nas dcadas de 1970 e 1980.
O grupo de cientistas e engenheiros foi liderado peloInstitute for
Electrical Engineering and Electronics Engineers - IEEE. O grupo
cou conhecido como IEEE p754.
A comunidade cientca foi liderada por William Kahan.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 30 / 95
Representao IEEE
A norma IEEE possui trs aspectos essenciais:
2
Walter Rudin no considera como um nmero. Ele trata como um smbolo
| | 00000000 | 00000000000000000000000 |.
Todas as linhas, exceto zero, comeam com um bit 1 escondido.
O expoente utiliza uma representao deslocada (biased
representation).O expoente a representao binria de E + 127.
Exemplo 7
O nmero 110 = (1,000 . . . 0)2 20 armazenado como
| 0 | 01111111 | 00000000000000000000000 |.
| 0 | 00000001 | 00000000000000000000000 |.
| 0 | 11111110 | 11111111111111111111111 |.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 34 / 95
Representao IEEE
Nmeros subnormalizados usam a combinao de expoente zero e a
parte fracionria no zero.
Exemplo 8
O nmero 2127 = (0,1)2 2126 . representado como
| 0 | 00000000 | 10000000000000000000000 |.
Exerccio 10
Calcule o menor nmero positivo que pode ser armazenado em um
sistema de 32 bits.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 35 / 95
Representao IEEE
O formato double utiliza 64 bits. As denies so semelhantes as
do formato de 32 bits.
A Tabela 4
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 36 / 95
Representao IEEE
A preciso single p = 24 corresponde a aproximadamente 7 dgitos
decimais, pois 2
24 107 .
Ou de modo equivalente
Exemplo 9
A representao no formato single IEEE para
= 3,141592653 . . .
= 3,141592741 . . . .
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 37 / 95
Arredondamento
Os nmeros na norma IEEE podem ser expressos na forma
Denition 2
Seja o nmero x o nmero utuante mais prximo de x que menor
ou igual a x. Seja x+ o nmero utuante mais prximo de x que
maior ou igual a x.
O intervalo entre x e x+
2(p1) 2E . (13)
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 40 / 95
Arredondamento
A norma IEEE dene o valor arredondado correto de x, denotado
por round(x) da seguinte forma.
Se x um nmero utuante ento round(x) = x. Seno, o valor
depende do modo de arredondamento:
I Arredondamento para baixo: round(x) = x .
I Arredondamento para cima: round(x) = x+ .
I Arredondamento em direo a zero: round(x) = x (x > 0) ou
round(x) = x+ (x < 0)
I Arredondamento para o mais prximo: round(x) tanto x ou x+ ,
dependendo de qual for mais prximo de x. Se houver um empate,
aquele com o ltimo bit signicativo igual a zero escolhido.
O modo padro em praticamente todas as aplicaes o
arredondamento para o mais prximo.
Exemplo 10
Usando o padro IEEE single, elabore um exemplo em que x e x+
esto a um mesma distncia de x.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 41 / 95
Arredondamento
Denition 3
Seja x um nmero real. Dene-se como erro absoluto de
arredondamento
abserr(x) = |round(x) x|. (14)
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 42 / 95
Arredondamento
Denition 4
O erro de arredondamento relativo para um nmero x denido por
round(x) x
relerr(x) = || = | |. (17)
x
round(x) x 2(p1) 2E
relerr(x) = || = | |< = 2(p1) = .
x 2E
(18)
1
|| < . (19)
2
O nmero de bits em acordo para o arredondamento para o mais
prximo
log2 (relerr(x)) > p. (20)
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 43 / 95
Arredondamento
O nmero de dgitos decimais em concordncia
Theorem 1
Seja x R normalizado em um sistema binrio de ponto utuante com
preciso p. Ento
round(x) = x(1 + )
para um que satisfaz
|| < = 2(p1)
ou para modo de arredondamento para o mais prximo
1
|| < = 2p .
2
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 44 / 95
Operaes na norma IEEE
Um ponto central na norma IEEE exigir que:
I Operaes aritmtica arredondadas corretamente (adio,
subtrao, multiplicao e diviso).
I Operao de resto e raiz quadrada arredondada corretamente.
I Converso de formato arredondada corretamente.
Arredondado corretamente signica que o arredondamento se
adequar o resultado de destino.
Exemplo 11
1 e 224 so nmeros utuantes (representao exata). Mas o resultado
de 1 + 224 no um nmero utuante.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 45 / 95
Operaes na norma IEEE
Seja x e y nmeros utuantes, ento
x y = round(x + y) = (x + y)(1 + )
x y = round(x y) = (x y)(1 + )
x y = round(x y) = (x y)(1 + )
x y = round(x y) = (x y)(1 + )
em que
1
|| < .
2
Exerccio 11
Seja x=z=1 e y = 225 . Calcule
(a) (x + y) z single.
no formato
Exerccio 12
Considerando os valores no Exerccio 11 e formato single, calcule
(a) x (y z).
(b) (x z) y .
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 47 / 95
Operaes na norma IEEE
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 48 / 95
Excees
Um dos aspectos mais difceis de programao a necessidade de
antecipar situaes de exceo.
Exemplo 12
O clculo da resistncia total de um circuito eltrico com dois resistores
conectados em paralelo, R1 e R2 , quando R1 = 0 dado por
1 1 1 1
T = 1 1 = 1 1 = 1 = = 0.
R1 + R2 0 + R2 + R2
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 49 / 95
Excees
verdade que a0 zero para qualquer valor nito de a.
Tambm verdade que a/0 = , + = e a = .
As expresses 0 , e 0/0 no tem sentido matemtico.
So consideradas operaes invlidas.
Exemplo 13
Seja as sequnciasxk e yk divergentes to , por exemplo, xk = 2k e
yk = 2k, para k = 1,2,3 . . . . Claramente a sequncia xk + yk diverge
para . Mas no possvel calcular o resultado de xk yk .
Consequentemente NaN.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 50 / 95
Excees
Qual a razo para 1/0 ter o valor de e no ?
Para responder isso, tem-se diferentes nmeros para 0 e 0, de tal
forma que a/0 = e a/ 0 = .
O teste 0 == 0 verdadeiro e o teste == falso.
3
A raiz quadrada de um nmero negativo uma operao invlida .
No h relao de ordem para variveis que recebem NaN.
Overow ocorre quando o resultado da operao nito mas com
valor absoluto maior que o maior nmero utuante disponvel.
Na norma IEEE, o resultado de um overow Nmax ou a
depender do modo de arredondamento.
Underow ocorre quando o valor exato de uma operao no zero
mas possui valor absoluto menor que o menor nmero utuante
normalizado.
Na norma IEEE, o resultado de um underow um nmero
subnormal, Nmin ou 0 a depender do modo de arredondamento.
Esse processo conhecido como gradual underow.
3
No Scilab, o resultado de 1 = i
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 51 / 95
Excees
Exemplo 14
Considere a seguinte operao usando o padro single do IEEE. O
segundo operando Nmin e o primeiro ligeiramente superior.
( 1,01000000000000000000000 )2 2126
( 1,00000000000000000000000 )2 2126
= ( 0,01000000000000000000000 )2 2126 (22)
128
Normalize : = ( 1,00000000000000000000000 )2 2
| 0 | 00000000 | 01000000000000000000000 |.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 52 / 95
Excees
Situao Resultado
Operao Invlida NaN
Diviso por zero
Overow ou Nmax
Underow Subnormal, 0 ou Nmin
Inexato Valor arredondado corretamente
Tabela 3: Resposta padro a excees de acordo com a norma IEEE.
Exerccio 13
Pense em alguma alternativa que possa tornar o clculo de (23) mais
eciente. p
x2 + y 2 (23)
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 53 / 95
Microprocessadores Intel
Os dois principais fabricantes de chips a adotarem o padro IEEE
foram Intel (nos computadores da IBM) e Motorola (nos
computadores da Apple e Sun).
O microprocessador Intel original era o chip 8086 em 1978, que
inclua a unidade central de processamento (CPU) e a unidade de
lgica e aritmtica (ALU), mas sem operaes de ponto utuante.
Em 1980, a Intel anunciou os chips 8087 e 8088, sendo
primeiramente usados pelos computadores da IBM.
O chip 8087 possua um co-processador para ponto utuante,
oferecendo assim uma unidade de ponto utuante (FPU).
Os sucessores do 8087, os chips 80287, 80387 possuam
co-processadores separados.
A partir dos chips 80486 DX, o Pentium, o Pentim Pro, o Pentium
II passaram a incluir a FPU no chip principal.
Embora as geraes de chips sejam cada vez mais rpidas, a
arquitetura da famlia Pentium permanece essencialmente a mesma
do chip 8087.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 54 / 95
Microprocessadores Intel
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 55 / 95
Microprocessadores Intel
Os registradores esto organizados em uma pilha numerada de 0 a
7.
(a + b) c,
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 56 / 95
Microprocessadores Intel
Instrues em Assembly para a expresso (a + b) c.
FLD A
FLD B
FADD
FLD C
FMUL
FSTP X
FLD coloca o valor presente na memria na posio A no topo da
pilha.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 57 / 95
Microprocessadores Intel
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 58 / 95
Microprocessadores Intel
Adicionalmente ao ponteiro que indica a posio no topo da pilha,
o status word contm as cinco excees que so requeridas pelo
IEEE.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 59 / 95
Exerccios em Sala
y nas seguintes
1 Calcule o resultado para operaes.
1 2
(a) y = lim xn + quando x0 [0,5; 1,5].
n 2 xn
(b) Calcule y = lim xn+1 , para x0 = 27 e
( n
xn /2 if xn for par
xn+1 = .
3xn + 1 if xn for mpar
2 Seja a funo recursiva denida por
xn+1 = 4,1xn (1 xn ),
Exemplo 15
main () /* Program 1: Echo */
{
float x;
scanf("%f",&x);
printf("x=%f",x);
}
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 61 / 95
Ponto Flutuante no C
O segundo argumento de scanf indica o endereo de x.
O segundo argumento de printf o valor de x.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 62 / 95
Ponto Flutuante no C
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 63 / 95
Ponto Flutuante no C
Considere o seguinte programa com um loop.
while (x>0) {
x = x/2;
n++;
printf("(2 raised to the power -%d) = %e \n",n,x);
}
}
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 64 / 95
Ponto Flutuante no C
Considere um outro programa com um loop.
while (y>1) {
x = x/2;
y=1+x;
n++;
printf("(1 added to (2 to the power -%d) = %e \n", n, y);
}
}
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 65 / 95
Ponto Flutuante no C
Considere um outro programa com um loop.
total(1/(1/r1+1/r2);
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 66 / 95
Ponto Flutuante no C
Tabela 6: Resultados do Clculo da Resistncia Paralela
R1 R2 Resistncia Total
1 1 5.000000e 01
1 10 9.090909e 01
1 1000 9.990010e 01
1 1.0e5 9.999900e 01
1 1.0e10 1.000000e + 00
1 0.1 9.090909e 02
1 1.0e 5 9.999900e 06
1 1.0e 10 1.000000e 10
1 0 0.000000e + 00
Exerccio 14
Se R1 = 1, aproximadamente para qual faixa de valores de R2 o
Program 4 oferece um resultado igual a 1?
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 67 / 95
Ponto Flutuante no C
Para iniciar a biblioteca matemtica no C, necessrio incluir o
comando #include <math.h> no incio do programa.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 68 / 95
Cancelamento
Considere os os dois nmeros
x = 3,141592653589793
e
y = 3,141592653585682
.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 69 / 95
Cancelamento
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 70 / 95
Cancelamento
Um exemplo de cancelamento pode ser obtido pela aproximao da
derivada.
f (x + h) f (x)
lim . (27)
h0 h
Uma idia natural avaliar (27) para um valor pequeno de h. Mas
quo pequeno?
%Parmetros iniciais
x=1;h=1;n=1;deriv=cos(x);
%Exibir na tela
sprintf('O valor da derivada %13.6e',deriv)
disp(' h diffquo abs(deriv - diffquo)')
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 73 / 95
Cancelamento
0
10
2
10
4
10
error
6
10
8
10
10
10 20 15 10 5 0
10 10 10 10 10
h
Figura 11: Erro em funo do valor de h. Escala logartmica. Conforme
programa no Exemplo 16.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 74 / 95
Cancelamento
O erro apresentado na Figura 81 em funo do valor de h, usando
uma escala logaritmica.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 75 / 95
Cancelamento
O valor do erro reduzido por 10 a medida que h reduzido em
10, at o ponto em que o cancelamento torna-se expressivo.
h2 00
f (x + h) = f (x) + hf 0 (x) + f (z), (28)
2
em que f 00 (z) a segunda derivada de f em z.
A Equao (28) chamada de srie de Taylor truncada.
De (28), tem-se:
f (x + h) f (x) h2 00
f 0 (x) = f (z). (29)
h 2
A quantidade (29) a diferena enter aquilo que computado e o
valor da derivada. O valor absoluto de (29) o erro de
discretizao que da ordem de O(h).
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 76 / 95
Cancelamento
Ao reduzir h em 10, o erro de discretizao tambm reduz em 10
(aproximadamente, uma vez que o valor de z tambm muda).
f (x + h) f (x h)
lim . (30)
h0 2h
A Equao (30) chamada de quociente de diferena central.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 77 / 95
Cancelamento
Considere a srie de Taylor truncada
h2 00 h3
f (x + h) = f (x) + hf 0 (x) + f (x) + f 000 (z1 ) (31)
2 6
para z1 entre x e x + h.
Considerando, x h, tem-se
h2 00 h3
f (x h) = f (x) h0 f 0 (x) + f (x) f 000 (z2 ) (32)
2 6
para z2 entre x e x h.
Subraindo (32) de (31) e divindo por 2h,tem-se
f (x + h) f (x h) h2 000
f 0 (x) = (f (z1 ) f 000 (z2 )). (33)
2h 12
O valor absoluto de (33) o erro de discretizao para o quociente
da diferena central, que da ordem de O(h2 ), ao invs de O(h)
para o quociente da diferena.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 78 / 95
Cancelamento
O exerccio 11.1, pg. 75, (Overton, 2001), pede para mudar o
programa do Exemplo 16, e usar o quociente da diferena central.
O programa foi implementado no Matlab conforme Exemplo 17.
Exemplo 17
x=1;h=1;n=1;deriv=cos(x);
sprintf('O valor da derivada %13.6e',deriv)
disp(' h diffquo abs(deriv - diffquo)')
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 80 / 95
Cancelamento
0
10
2
10
4
10
error
6
10
8
10
10
10
12
10 20 15 10 5 0
10 10 10 10 10
h
Figura 12: Erro em funo do valor de h. Escala logartmica. Conforme
programa no Exemplo 17.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 81 / 95
Condicionamento de Problemas
O condicionamento de um problema mede a preciso que se pode
esperar ao se utilizar um sistema de ponto utuante,
independentemente do algoritmo utilizado.
Seja y = f (x) uma funo duas vezes diferencivel e que x e f (x)
estejam na faixa normalizada. Considere
x = round(x).
Utilizando um computador com ponto utuante, o melhor que se
pode esperar do resultado
y = f (x).
Observao: f no pode ser calculada sempre exatamente.
O erro relativo satisfaz o seguinte limite
|x x|
< ,
|x|
em que a preciso de mquina (h um fator de 1/2 quando se
arredonda para o mais prximo).
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 82 / 95
Condicionamento de Problemas
Segue ento que
|x x|
log10 > log10 (). (34)
|x|
|y y|
log10 .
|y|
Seja
y y f (x) f (x) x x x
= . (35)
y x x f (x) x
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 83 / 95
Condicionamento de Problemas
O fator (36) aproxima f 0 (x).
f (x) f (x)
, (36)
x x
Assim, tem-se:
y y x x
f (37)
y x
em que
|x| |f 0 (x)|
f = . (38)
|f (x)|
f chamado de nmero condicional de f em x. Isto mede
aproximadamente quanto o erro de arredondamento relativo
amplicado pelo clculo de f em x.
Tomando o logaritmo na base 10 de ambos os lados de (37), tem-se
y y x x
log10 log10 log10 (f ) . (39)
y x
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 84 / 95
Condicionamento de Problemas
log10 (f )
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 85 / 95
Condicionamento de Problemas
Exerccio 15
Calcule o nmro de dgitos perdido para as seguintes funes e
condies iniciais:
(1) exp(x)
(a) 1,000001
(b) 0,000001
(c) 1,000001
(2) log(x)
(a) e (double)
(b) 1,001
(c) 1,000001
(d) 1/e (double)
(3) sin(x)
(a) (double)
(b) /2 (double)
(c) 0,000001
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 86 / 95
Condicionamento de Problemas
Exerccio 16
Seja a equao do mapa logstico
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 87 / 95
Estabilidade de Algoritmos
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 88 / 95
Estabilidade de Algoritmos
Seja a funo
y = f (x),
duas vezes diferencivel com x e f (x) na faixa normalizada.
|y y| |x x|
f , (42)
|y| |x|
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 89 / 95
Estabilidade de Algoritmos
Isso signica que ao m do primeiro quadrimestre do ano, o valor
do investimento
a1 = a0 (1 + 0,05/4). (43)
a2 = a0 (1 + 0,05/4)2 . (44)
E assim ao m de n perodos
an = a0 (1 + 0,05/4)n . (45)
an = a0 Cn (x) (46)
em que
x n
Cn (x) = 1 + . (47)
n
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 90 / 95
Estabilidade de Algoritmos
Para um valor xo de x, tem-se que Cn (x) tem um valor limite,
para n , de exp(x).
Vamos investigar o nmero condicional de Cn (x). Usando a regra
da cadeia, o valor da derivada
x n1 1 Cn (x)
Cn0 (x) = n 1 + = . (48)
n n 1 + nx
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 91 / 95
Estabilidade de Algoritmos
Exemplo 18
x=input('Entre com o valor de x: ')
n=input('Entre com o valor do nmero de meses: ')
%Preciso single
x=single(x);n=single(n);
z=1+x/n;w=1;
for i=1:n
w=w*z;
end
v=log(z);
disp(sprintf('Algoritmo 1: a resposta %13.6e',w));
disp(sprintf('Algoritmo 2: a resposta %13.6e',power(z,n)));
disp(sprintf('Algoritmo 3: a resposta %13.6e',exp(n*v)));
XS%Melhor mtodo - Algoritmo 4:
%log1p(s) = log(1+s)
u=x/n;
v=log1p(u);
disp(sprintf('Algoritmo 4: a resposta %13.6e',exp(n*v)));
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 92 / 95
Estabilidade de Algoritmos
Resultado do Exemplo 18
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 93 / 95
Estabilidade de Algoritmos
f (x) = x 1 (50)
e
|x|
f = (51)
|x 1|
A Eq. (51) mostra valores muito altos para x 1.
Assim, um algoritmo que introduz cancelamento, tambm introduz
mal condicionamento.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 94 / 95
Estabilidade de Algoritmos
Exemplo 19
Leia, discuta em grupo, e implemente o artigo:
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 95 / 95