Escolar Documentos
Profissional Documentos
Cultura Documentos
Aproximação
João B. Florindo
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
Introdução
Introdução
Introdução
Introdução
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
Representação Numérica
Bases 12, 60, etc. já foram usuais no passado e outras como 8 e 16
são ainda úteis
10010 = 1 · 24 + 0 · 23 + 0 · 22 + 1 · 21 + 0 · 20 = 18
Representação Numérica
N = aj β j + aj−1 β j−1 + · · · + a2 β 2 + a1 β 1 + a0 β 0
Representação Numérica
Representação Numérica
João B. Florindo
Converter (187)10 para binário
b2 = (1)2
b1 = a1+b2*(1010)2 = (1000)2 + (1)2*(1010)2 = (10010)2
b0 = a0+b1*(1010)2 = (111)2 + (10010)2*(1010)2
1000
+1010
_________
10010
10010
x1010
Representação Numérica
____________
00000
10010+
Representação Numérica
00000++
10010+++
____________
10110100
1
10110100
+ 111
________
10111011
111
x111
____________
10 10 1
111
111+
111++
____________
Tópico 1 - Representação Numérica e Erros de Aproximação
11 0 0 0 1
(110001)2 = 25+24+20 = 49
12 / 62
Representação Numérica
Representação Numérica
Representação Numérica
Demonstração
Usamos novamente a forma aninhada:
N = a0 + 2(a1 + 2(a2 + 2(a3 + 2(· · · + 2(aj−1 + 2aj )))))
Note como a cada divisão por 2 o quociente é a parte dentro dos
parêntesis e o resto são examente os coeficientes a0 , a1 , . . . , aj−1 .
O último coeficiente aj é o próprio quociente.
Como aj < 2 o quociente da próxima divisão aj /2 é 0, o resto é aj e o
algoritmo para.
João B. Florindo
Passo 2:
q1 = 46, r1 = 1
a1 = 1, N1 = 46, k=2
Passo 3:
q2 = 23, r1 = 0
a2 = 0, N2 = 23, k=3
Representação Numérica
Passo 4:
q3 = 11, r3 = 1
Representação Numérica
a3 = 1, N3 = 11, k=4
Passo 5:
q4 = 5, r4 = 1
a4 = 1, N4 = 5, k=5
Passo 6:
q5 = 2, r5 = 1
a5 = 1, N5 = 2, k=6
Passo 7:
Tópico 1 - Representação Numérica e Erros de Aproximação q6 = 1, r6 = 0
a6 = 0, N6 = 1, k=7
Passo 8:
q7 = 0, r7=1
a7 = 1 PARAR
(a7a6...a0)2 = (10111011)2
15 / 62
Representação Numérica Fracionária
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
E os números não-inteiros?
Número real positivo x
Parte inteira xI : maior inteiro ≤ x
Parte fracionária xF = x − xI
∞
X
xF = bj 10−j
j=1
1
= 3 · 10−1 + 3 · 10−2 + 3 · 10−3 + . . .
3
∞
X
xF = bj 2−j
j=1
Demonstração
Forma aninhada novamente, agora para x entre 0 e 1:
x = b1 β −1 + b2 β −2 + b3 β −3 + b4 β −4 + · · · + bj β −j =
= β −1 (b1 + β −1 (b2 + β −1 (b3 + β −1 (b4 + β −1 (· · · + β −1 (bj−1 + bj β −1 ))))))
Note-se aqui a semelhança com o algoritmo anterior, da divisão por 2
Multiplicando-se por β no primeiro passo obtemos:
βc0 = βx =
b1 + β −1 (b2 + β −1 (b3 + β −1 (b4 + β −1 (· · · + β −1 (bj−1 + bj β −1 )))))
A parte inteira contém b1 pois sabemos que b1 é um inteiro entre 0 e
β − 1. Já o lado direito (em vermelho) sabemos ser fracionário pois é
equivalente a b2 β −1 + b3 β −2 + . . . , que obviamente é menor do que 1.
Repetindo o procedimento de multiplicar a parte fracionária por β sempre
encontramos bk na parte inteira até o momento em que a parte fracionária
for 0 e então todos os bk ’s seguintes serão sempre 0 e não terão mais
nenhum significado.
João B. Florindo Tópico 1 - Representação Numérica e Erros de Aproximação 20 / 62
ALGORITMO 3
Converter (0.625)10 para binário.
c0 = 0.625
j=0
Passo 1
b1 = 1, c1 = 0.25
j=1
Passo 2
b2 = 0, c2 = 0.5
j=2
João B. Florindo
Passo 3
b3 = 1, c3 = 0
PARAR
(0.625)10 = (0.101)2
Passo 3
b3 = 0, c3 = 0.44
j=3
Passo 4
b4 = 0, c4 = 0.88
j=4
Representação Numérica Fracionária
Passo 5
b5 = 1, c5 = 0.76
j=5
Passo 6
b6 = 1, c6 = 0.52
j=6
Passo 7
b7 = 1, c7 = 0.04
j=7
Tópico 1 - Representação Numérica e Erros de Aproximação
Passo 8
b8 = 0, c8 = 0.08
j=8
Passo 9
b9 = 0, c9 = 0.16
j=9
Passo 10
b10 = 0, c10 = 0.32
j=10
21 / 62
Representação Numérica Fracionária
P30000
Por que i=1 0.11 6= 3300?
0.11 possui representação infinita no sistema binário
Supondo um computador com 6 dı́gitos decimais:
(0.11)10 ≈ (0.000111)2
Mas:
(0.000111)2 = (0.109375)10
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
x = ±(.d1 d2 . . . dn )β β e ,
m<e<M
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
Padrão IEEE
Padrão IEEE
Considere o exemplo:
x =0 10000000011 1011100100010000000000000000000000000000000000000000
s = 0 (número positivo), c = 10000000011
e = 1 · 210+ 0 · 29 +· · · + 0 · 22 + 1 · 21 + 0
1 · 2 =11024
8 + 2 +112= 1027
1 1 1 3 1 4 1 5
f = 1 · 2 + 1 · 2 + 1 · 2 + 1 · 2 + 1 · 2 + 1 · 21
x = (−1)s 2e−1023 (1 + f ) =
(−1)0 · 21027−1023 1 + 21 + 18 + 16 1 1 1 1
+ 32 + 256 + 4096 = 27.56640625
Note-se que evidentemente números reais são “perdidos” nesta
representação pois o número imediatamente menor que x é
0 10000000011 1011100100001111111111111111111111111111111111111111
≈ 27.566406249999998 . . .
e o maior
0 10000000011 1011100100010000000000000000000000000000000000000001
≈ 27.566406250000002 . . .
x representa metade deste intervalo
Padrão IEEE
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
xω ∗ y = fl(xωy )
Operações alternativas
x ⊕ y = fl(fl(x) + fl(y ) x y = fl(fl(x) − fl(y )
x ⊗ y = fl(fl(x) × fl(y ) x y = fl(fl(x) ÷ fl(y )
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
Erro de Aproximação
Erro de Aproximação
Para compreender melhor o efeito da perda de dı́gitos significativos em
números contendo uma parte inteira e uma fracionária na base decimal
com n dı́gitos, vamos re-escrevê-los da seguinte forma:
Demonstração:
Seja x = a1 a2 . . . akI .b1 b2 . . . bkF
Na representação em ponto flutuante, a1 vem para logo após o ponto
decimal:
x = 0.a1 a2 a3 . . .
Portanto andei kI casas para a esquerda com meu ponto e preciso
multiplicar por 10kI
Portanto e = kI
Mas eu só posso representar n dı́gitos. Quantos ficam de fora?
R.: kI + kF − n
João B. Florindo Tópico 1 - Representação Numérica e Erros de Aproximação 38 / 62
Erro de Aproximação
Erro de Aproximação
Erro de Aproximação
Erro de Aproximação
Neste caso temos uma redefinição para erro absoluto (EAx ) e erro relativo
(ERx ) para uma aproximação x:
|EAx |
|EAx | = |x − x| e |ERx | =
|x|
Erro de Aproximação
Demonstração Truncamento:
|EAx | = |fx 10e + gx 10e−n − fx 10e | = |gx 10e−n | = |gx |10e−n . Como
|gx | < 1 temos |EAx | < 10e−n
e−n
|ERx | = |EA x| |gx |10
|x| = |fx |10e
Como |gx | tem seu máximo em 1 e |fx | tem seu mı́nimo em 0.1, a fração
10e−n 10e−n −n+1
acima é maximizada por 0.1×10 e = 10e−1 = 10
Logo: |ERx | < 10−n+1 (note que a desigualdade é estrita pois o valor
10−n+1 nunca á atingido de fato porque gx é sempre estritamente menor
que 1)
Erro de Aproximação
Demonstração Arredondamento:
fx × 10e
se |gx | < 0.5
x=
fx × 10e + 10e−n se |gx | ≥ 0.5
Portanto, se |gx | < 0.5:
|EAx | = |fx ×10e +gx ×10e−n −fx ×10e −10e−n | = |gx −1|×10e−n ≤ 0.5×10e−n
Erro de Aproximação
Demonstração Arredondamento:
0.5 × 10e−n
|ERx | ≤
|fx | × 10e + 10e−n
Como sabemos que 10e−n é positivo, ao ser somado no denominador ele
produz um resultado menor na divisão. Assim:
Erro de Aproximação
Erro de Aproximação
Demonstração
Adição:
x + y = (x + EAx ) + (y
+ EA
y ) = (x + y )+ (EAx
+ EA
y)
EAx+y EAy y y
ERx+y = x+y = EAx
x x
x+y + y x+y = ER x
x x+y + ER y x+y
Subtração:
x − y = (x + EAx ) − (y + EA y ) = (x− y )+ (EAx − EAy)
EAx−y EAx x EAy y x y
ERx−y = x−y = x x−y − y x−y = ER x x−y − ER y x−y
Multiplicação:
xy = (x + EAx )(y + EAy ) = xy + xEAy + y EAx + EAx EAy
Como se supõe EAx EAy pequeno: EAxy ≈ xEAy + y EAx
xEAy +y EAx EAy
ERxy ≈ xy = EA x + y = ERx + ERy
x
Erro de Aproximação
Divisão:
x x+EAx
y = y +EAy
Colocando y em evidência
no denominador:
x+EAx = x+EAx 1
EAy
y 1+
EAy y 1+
y y
1
= ∞ n
P
Lembremos agora da série geométrica: 1−x n=0 x se |x| < 1
1
Para a série de 1+x basta trocar x por −x e lembrar que agora potências
ı́mpares mudam sinal:
1 2 3 4 5
1+x = 1 − x + x − x + x − x + . . . e portanto:
2
EAy 3
1 EAy EAy
EAy = 1 − y + y − y + . . . . Desprezando potências
1+ y
maiores que1:
x+EAx EAy xEAy EAx EAy
x
y ≈ y 1 − y = yx + EAy −
x
y2
− y2
.
Como EAx EAy é muito pequeno:
xEAy y EAx −xEAy
EAx/y ≈ EAy − y2 =
x
y2
João B. Florindo Tópico 1 - Representação Numérica e Erros de Aproximação 47 / 62
Erro de Aproximação
Erro de Aproximação
Divisão:
EAx/y y EAx −xEAy y EAx EAy
ERx/y = x ≈ y2 x = x − y = ERx − ERy
y
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
Forma aninhada:
f (x) = x 3 − 6.1x 2 + 3.2x + 1.5 = ((x − 6.1)x + 3.2)x + 1.5 ⇒
Número de multiplicações: 2
Número de adições/subtrações: 3
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
Condicionamento e Instabilidade
Condicionamento e Instabilidade
p
Ex.: f (x) = (x) é bem-condicionada:
1
f 0 (x)x √
2 x
x 1
= √ =
f (x) x 2
10
Já f (x) = 1−x 2
é mal-condicionada devido ao problema com |x| ≈ 1:
2x 20x 2
f 0 (x)x 10 (1−x 2 )2 x (1−x 2 )2 2x 2
= 10
= 10
=
f (x) 1−x 2 (1−x 2 )
|1 − x 2 |
Condicionamento e Instabilidade
Condicionamento e Instabilidade
Quebrando em partes:
x0 ← 12345
x1 ← x0 + 1
√
x2 ← x1
√
x3 ← x0
x4 ← x2 − x3
A última função f3 (t) = x2 − t possui o seguinte condicionamento:
f 0 (x)x t
= ,
f (x) x2 − t
Outline
1 Introdução
2 Representação Numérica
3 Representação Numérica Fracionária
4 Aritmética de Ponto Flutuante
5 Padrão IEEE
6 Conversão para Ponto Flutuante
7 Erro de Aproximação
8 Propagação de Erro em Operações Especı́ficas
9 Condicionamento e Instabilidade
10 Precisão de Máquina
Precisão de Máquina
Precisão de Máquina