Métodos Numéricos para Engenheiros com Scilab

Propaganda
Métodos Numéricos para Engenheiros com Scilab
Sérgio Galdino
26 de Setembro de 2013
Capítulo 1
Erros em computações
numéricas
1.1 Glamour da computação
A opinião geral é que computadores são capazes de fazer operações aritméticas rapidamente e com grande exatidão. Em parte correta quando comparada ao cálculo manual. Por exemplo, taxas típicas para multiplicação
manual de números são 0.05s−1 ( são 20s para efetuar uma multiplicação)
enquanto num computador são tipicamente maiores que 106 s−1 chegando
facilmente a 1012 s−1 em supercomputadores. Os cálculos computacionais
superam em várias ordens de magnitude os cálculos manuais, permitindo,
assim, enfrentar verdadeiros desaos computacionais. Só para produzir o
efeito psicodélico pode ser dito que em 1 segundo um computador de 106 /s
pode fazer mais cálculos (e sem cometer erros grosseiros) que uma pessoa irá
fazer manualmente em sua vida inteira. Desviando-se do glamour da computação, este capítulo dará bases pra mostrar que resultados de computações
numéricas devem ser vistas com cautela.
1.2 Análise numérica versus análise matemática
A análise matemática (no cotidiano) e análise numérica diferem muito quando
são utilizadas. A análise matemática normalmente assume uma representação innita para números e processos, enquanto computações numéricas são
realizadas em maquinas nitas em tempo nito. A representação nita dos
números em uma máquina produz erros de arredondamento, enquanto a representação nita de um processo produz erro de truncamento:
Exemplos:
Números:
π = 3.1415926535 . . .
(1.1)
3
4
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
1
= 0.33333 . . .
3
(1.2)
Processos:
∫
b
f (x)dx = lim
∆xi →0
a
n
∑
f (xi )∆xi ,
∆xi = (xi+1 − xi )
(1.3)
i=1
df (x)
= lim
∆x→0
dx
(
f (x + ∆x) − f (x)
∆x
)
(1.4)
Grande parte da matemática é sensível aos efeitos produzidos pelo arredondamento numérico; esta vulnerabilidade é que os estatísticos chamam de
"não é robusto".
Esta diferença é fundamental, pois somente partes da matemática resistente aos erros de arredondamentos são úteis em matemática aplicada ao
mundo real.
Signicados diferentes surgem para as mesmas palavras. A expressão zeros de um polinômio pode ter vários signicados em computação e um único
signicado em matemática (ver [4] sec 1.10).
A matemática lida preferencialmente com teoremas exatos e precisos;
análise numérica usa muitos métodos heurísticos. A existência de um teorema não é suciente em cálculos computacionais. Estas diferenças são
muitas vezes sérias e conduzem a grandes desentendimentos.
1.3 Dígitos signicativos, precisão, exatidão e erros
Quando se trata com valores numéricos e cálculos numéricos, existem vários
conceitos que devem ser considerados: ,
1. Dígitos signicativos
2. Precisão e exatidão
3. Representação do número
4. Erros
Os três primeiros conceitos são discutidos brevemente nesta seção e os
demais nas próximas.
Dígitos signicativos
1.4.
COMPUTAÇÕES NUMÉRICAS
5
Os algarismos signicativos, ou dígitos signicativos em um número, são
os dígitos do número que se sabe serem corretos. Cálculos de engenharia e
cientícos geralmente começam com um conjunto de dados com um número
limitado de dígitos signicativos. Quando estes números são processados
através de um algoritmo numérico, é importante estimar quantos dígitos signicativos estão presentes no resultado nal computado.
Precisão e Exatidão
Precisão refere-se a quão próximo um número representa o número que
ele está representando.
Exatidão refere-se a quão próximo um número está do valor real do número que está representando quanticado pelo erro absoluto ou relativo. O
termo precisão refere-se a exatidão com as quias as operações aritméticas são
realizadas. A precisão é governada pelo número de dígitos a ser utilizado nos
cálculos numéricos. A exatidão é regida por erros na aproximação numérica.
Precisão e exatidão são quanticados pelos erros de cálculos numéricos.
1.4 Computações Numéricas
A aritmética das máquinas digitais (computadores, calculadoras, ...) não
é a mesma que é usada em cursos de cálculo ou álgebra.
Assume-se como
√
armações verdadeiras que 2 + 2 = 4, 22 = 4, e ( 2)2 = 2. Na aritmética
padrão das máquinas digitais as duas primeiras são verdadeiras mas a terceira
não. Para entender poque isto é verdadeiro deve-se explorar o mundo da
aritmética de precisão nita utilizada por máquinas digitais.
1.4.1 Representação
O sistema de numeração decimal é o mais usado pelo homem nos dias de
hoje. O número 10 tem papel fundamental, é chamado de base do sistema.
Os símbolos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, são usados para representar qualquer grandeza. O fato de o sistema decimal ser largamente utilizado tem
evidentemente razões históricas, pois na realidade qualquer número inteiro
maior que 1 poderia ter sido escolhido. De fato, no mundo dos computadores
digitais o sistema binário é o utilizado. O número 2 é a base do sistema e os
símbolos 0 e 1 servem para representar uma grandeza qualquer. Ao lado do
sistema binário, os sistemas octal, hexadecimal, base 8 e 16 respectivamente,
são também utilizados. Isto ocorre pelo fato de que cada símbolo octal e
hexadecimal representa um equivalente a três e quatro símbolos no sistema
binário e vice-versa.
6
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
1.4.2 Conversão
Dado um número x representado na base N, isto é, na N-representação, e nós
queremos saber como representa-lo na base M, isso é, na M-representação.
Temos então a equação:
x = am N m + · · · + a1 N 1 + a0 N 0 + a−1 N −1 + · · · + a−n N −n
= bj M j + · · · + b1 M 1 + b0 M 0 + b−1 M −1 + · · · + b−k M −k
(1.5)
onde os coecientes am , am−1 , · · · , a1 , a0 , a−1 , · · · , an−1 , a−n são conhecidos e os coecientes bj , bj−1 , · · · , b1 , b0 , b−1 , · · · , bk−1 , b−k devem ser
determinados. Observe que bj , bj−1 , · · · , b1 , b0 , b−1 , · · · , bk−1 , b−k devem
ser expressos com símbolos de dígitos da N-representação. Para realizar a
conversão dividiremos x em uma parte inteira i e uma parte fracionária f .
Nós temos i = bj M j + · · · + b1 M 1 + b0 M 0 , e dividindo i por M nós obtemos
um quociente q1 e um resto r1 = b0 . Continuando, dividiremos q1 por M ,
nós conseguiremos q2 e o resto r2 = b1 , e, obviamente, b0 , b1 , b2 , · · · são os
restos consecutivos quando i é dividido repetitivamente por M . De forma
semelhante nós encontramos a parte fracionária como as partes inteiras consecutivas quando f é multiplicado repetitivamente por M e a parte inteira
é removida. Os cálculos devem ser feitos na N-representação e M deve ser
também dado nesta representação.
Exemplo 1 Conversão o número decimal 261, 359 para a representação binária.
Conversão: Decimal para binário
Inteiro: Divisão sucessiva do número decimal por 2
261 2
1 130 2
0 65 2
1 32 2
0 16 2
0 8 2
0 4 2
0 2 2
0 1
O número inteiro binário é obtido através dos restos das divisões escritos
na ordem inversa da sua obtenção. Então 26110 = 1.0000.01012 .
Fração: Multiplicação sucessiva da fração decimal por 2
1.4.
COMPUTAÇÕES NUMÉRICAS
7
Multiplicação
Sobra
0,359x2 = 0,718
0
0,718x2 = 1,436
1
0,436x2 = 0,872
0
0,872x2 = 1,774
1
0,774x2 = 1,488
1
0,488x2 = 0,976
0
0,976x2 = 1,952
1
0,952x2 = 1,904
1
0,904x2 = 1,808
1
..
.. ..
..
.
. .
.
A fração binária é obtida através das sobras, parte inteira, das multiplicações
escritas na ordem direta de sus obtenção. Então 0, 35910 = 0, 0101.1011.1 · · ·2 .
Somando-se as partes inteiras e fracionárias dos binários obtidos têm-se
261, 35910 = 1.0000.0101, 0101.1011.1 · · ·2
Exemplo 2 Conversão o número decimal 261, 359 para a representação ter-
nária.
Conversão: Decimal para ternário
Inteiro: Divisão sucessiva do número decimal por 3
261 3
0 87 3
0 29 3
2 9 3
0 3 3
0 1
O número inteiro ternário é obtido através dos restos das divisões escritos
na ordem inversa da sua obtenção. Então 26110 = 100.2003 .
Fração: Multiplicação sucessiva da fração decimal por 3
8
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
Multiplicação
Sobra
0,359x3 = 1,077
1
0,077x3 = 0,231
0
0,231x3 = 0,693
0
0,693x3 = 2,079
2
0,079x3 = 0,237
0
0,237x3 = 0,711
0
0,711x3 = 2,133
2
0,133x3 = 0,399
0
0,399x3 = 1,197
1
..
.. ..
..
.
. .
.
A fração ternária é obtida através das sobras, parte inteira, das multiplicações escritas na ordem direta de sus obtenção. Então 0, 35910 =
0, 100.200.201 · · ·3 . Somando-se as partes inteiras e fracionárias dos binários obtidos têm-se
261, 35910 = 100.200, 100.200.201 · · ·3
Exemplo 3 Conversão o número decimal 261, 359 para a representação hexa-
decimal.
Conversão: Decimal para hexadecimal
Inteira: Divisão sucessiva do número decimal por 16
261 16
5 16 16
0 1
O número inteiro hexadecimal é obtido através dos restos das divisões
escritos na ordem inversa da sua obtenção. Então 26110 = 10516 .
Fração: Multiplicação sucessiva da fração decimal por 16
Multiplicação
Sobra
0,359x16 = 5,744
5
0,744x16 = 11,904
11
0,904x16 = 14,464
14
0,464x16 = 7,424
7
0,424x16 = 6,784
6
0,784x16 = 12,544
12
0,544x16 = 8,704
8
0,704x16 = 11,264
11
0,264x16 = 4,224
4
..
.. ..
..
.
. .
.
1.4.
COMPUTAÇÕES NUMÉRICAS
9
Tabela 1.1: Símbolos Hexadecimais.
Grandeza
Símbolo
decimal hexadecimal
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
A
11
B
12
C
13
D
14
E
15
F
A fração hexadecimal é obtida através das sobras, parte inteira, das multiplicações escritas na ordem direta de sus obtenção. Então
0, 35910 = 0, 5 11 14 7 6 12 8 11 4 · · ·16
ou utilizando-se os símbolos hexadecimais (Tabela 1.1)
0, 35910 = 0, 5BE.76C.8B4 · · ·16
Somando-se as partes inteiras e fracionárias dos binários obtidos têm-se
261, 35910 = 105, 5BE.76C.8B4 · · ·16
Conv10.sce
Este roteiro Scilab realiza a conversão de inteiros na base 10 para base
qualquer.
1.
2.
3.
4.
5.
6.
7.
// Conversão de inteiros da base 10 para uma base qualquer
function y=conv10(x,b)
y=''
while x > 0
cx=modulo(x,b)
x=int(x/b)
y=string(cx)+'.'+y
10
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
8. end
9. endfunction
Ao executar o roteiro Conv10.sce pode-se realizar as conversões. Aqui
estão os resultados:
-->conv10(261,2)
ans =
1.0.0.0.0.0.1.0.1.
-->
-->conv10(261,3)
ans =
1.0.0.2.0.0.
-->
-->conv10(261,16)
ans =
1.0.5.
-->
ConvF10.sce
Este roteiro Scilab realiza a conversão de fracionários na base 10 para
base qualquer.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// Conversão de fracionários da base 10 para uma base qualquer
function y=convF10(x,b,n)
y='0,'
i=0
while i < n
p=x*b
cx=int(p)
y=y+string(cx)+'.'
x=p-cx
i=i+1
end
endfunction
Ao executar o roteiro ConvF10.sce pode-se realizar as conversões. Aqui
estão os resultados:
-->convF10(0.359,2,9)
ans =
0,0.1.0.1.1.0.1.1.1.
-->
-->convF10(0.359,3,9)
ans =
1.4.
COMPUTAÇÕES NUMÉRICAS
11
0,1.0.0.2.0.0.2.0.1.
-->
-->convF10(0.359,16,9)
ans =
0,5.11.14.7.6.12.8.11.4.
-->
Conv10X.sce
Este roteiro Scilab realiza a conversão de um número na base 10 para
base qualquer (combina Conv10.sce e ConvF10.sce ) .
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
// Conversão da base 10 para uma base qualquer: Inteiro + Fração
function y=conv10X(xx,b,n)
x=int(xx)
yi=''
while x > 0
cx=modulo(x,b)
x=int(x/b)
yi=string(cx)+'.'+yi
end
y=yi
x=xx-int(xx)
yf=','
i=0
while i < n
p=x*b
cx=int(p)
yf=yf+string(cx)+'.'
x=p-cx
i=i+1
end
y=y+yf
endfunction
Ao executar o roteiro Conv10X.sce pode-se realizar as conversões. Aqui
estão os resultados:
-->conv10X(261,2,0)
ans =
1.0.0.0.0.0.1.0.1.,
-->
-->conv10X(0.359,2,9)
ans =
,0.1.0.1.1.0.1.1.1.
-->
-->conv10X(261.359,2,9)
ans =
12
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
1.0.0.0.0.0.1.0.1.,0.1.0.1.1.0.1.1.1.
-->
-->conv10X(261,16,0)
ans =
1.0.5.,
-->
-->conv10X(0.359,16,9)
ans =
,5.11.14.7.6.12.8.11.4.
-->
-->conv10X(261.359,16,9)
ans =
1.0.5.,5.11.14.7.6.12.8.11.4.
-->
1.4.3 Conversão de uma base qualquer para base 10
Para obter-se o número decimal equivalente a um número escrito em qualquer
base é só multiplicar cada dígito por sua potência:
Exemplo 4
261, 35910 ∼
= 1.0000.0101, 0101.1011.12
Parte inteira
1 · 28 + 0 · 27 + 0 · 26 + 0 · 25 + 0 · 24 + 0 · 23 + 1 · 22 + 0 · 21 + 0 · 20
= 261
Parte fracionária
0 · 2−1 + 1 · 2−2 + 0 · 2−3 + 1 · 2−4 + 1 · 2−5 + 0 · 2−6 + 1 · 2−7 +
1 · 2−8 + 1 · 2−9 ∼
= 0, 3574
Erro
|261, 359 − 261, 3574| = 0, 0016
Exemplo 5
261, 35910 ∼
= 100.200, 100.200.2013
Parte inteira
1 · 35 + 0 · 34 + 0 · 33 + 2 · 32 + 0 · 31 + 0 · 30
= 261
1.4.
COMPUTAÇÕES NUMÉRICAS
13
Parte fracionária
1 · 3−1 + 0 · 3−2 + 0 · 3−3 + 2 · 3−4 + 0 · 3−5 + 0 · 3−6 + 2 · 3−7 +
0 · 3−8 + 1 · 3−9 ∼
= 0, 35899
Erro
|261, 359 − 261, 35899| = 0, 00001
Exemplo 6
261, 35910 ∼
= 105, 5 11 14 7 6 12 8 11 416 ou seja,
261, 35910 ∼
= 105, 5BE.76C.8B416
Parte inteira
1 · 162 + 0 · 161 + 5 · 160 = 261
Parte fracionária
5
11
14
7
6
12
8
11
4
+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9
1
16
16
16
16
16
16
16
16
16
∼
= 0, 35899999999674
Erro
|261, 359 − 0, 35899999999674| ∼
= 3, 24 × 10−12
1.4.4 Representação de um número inteiro
A representação de um número inteiro num computador qualquer que
trabalha internamente com uma base xa β ≥ 2 (um número inteiro); sendo
geralmente escolhido como uma potência de 2.
Dado um número inteiro n ≥ 0, ele possui uma única representação,
n = ±(nk nk−1 · · · n1 n0 )
= ±(nk β k + nk−1 β k−1 + · · · + n1 β 1 + n0 β 0 ),
(1.6)
onde os ni , i = 0, 1, · · · , k são inteiros satisfazendo 0 ≤ ni < β e nk ̸= 0.
Por exemplo, na base β = 10, o número 1957 é representado por:
1957 = 1 × 103 + 9 × 102 + 5 × 101 + 7 × 100
e é armazenado como n3 n2 n1 n0 .
14
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
1.4.5 Representação de um número real
A representação de um número real no computador pode ser feita de duas
maneiras:
a) Representação do ponto xo
Este foi o sistema usado, no passado, por muitos computadores. Sendo ainda
usado por ser simples em aplicações de microprocessadores. Um número real,
x ̸= 0, ele será representado em ponto xo por:
x=±
−l
∑
(1.7)
xi β i
i=k
onde k e l são o comprimento da parte inteira e fracionária do número x,
respectivamente.
Por exemplo, na base β = 10, o número 1957.325 é representado por:
1957.325 = +
−3
∑
xi β i
i=3
= 1 × 103 + 9 × 102 + 5 × 101 + 7 × 100 + 3 × 10−1 + 2 × 10−2 + 5 × 10−3
e é armazenado como x3 x2 x1 x0 .x−1 x−2 x−3 .
b) Representação do ponto-utuante
Em geral, um número x na representação do ponto-utuante tem a forma seguinte:
x = ±m · β k
(1.8)
onde
m=
mantissa, um número fracionário em ponto xo, isto é,
m=
n
∑
m−i β −i
i=l
l > 0, frequentemente l = 1, tal que se x ̸= 0, então m−1 ̸= 0; 0 ≤ m−i < β ,
i = 1, 2, · · · t, com t a quantidade de dígitos signicativos ou precisão do sistema ,
β −1 ≤ m < 1 e −m ≤ k ≤ M ) ;
β = base, 2 se o sistemas de numeração for binário, 10 se o sistema de
(onde
numeração for decimal, etc.;
k=
expoente, um inteiro.
Observação 1
m−1 ̸= 0 ou
1
< m < 1 (signica que devemos ter um digito não
β
nulo após a virgula) caracteriza o sistema de números em ponto utuante normalizado.
Observação 2
o número zero pertence a qualquer sistema e é representado com
mantissa igual a zero e k = −m.
1.4.
15
COMPUTAÇÕES NUMÉRICAS
Exemplo 7
normalizada.
Escrever o número N = −19.2 · 10−8 em ponto utuante na forma
Reescrevendo o número para a forma N = −0.192 · 10−6 , o número ca na representação do ponto-utuante, o expoente é igual a -6, a mantissa é igual a -0.192
e a base é 10.
Escrevendo agora os números: x1 = 0.53; x2 = −8.472; x3 = 0.0913; x4 =
35391.3 e x5 = 0.0004 , onde todos estão na base β = 10, em ponto utuante na
forma normalizada:
x1
x2
x3
x4
x5
= 0.53 = 0.53 × 100 ,
= −8.472 = −0.8472 × 101 ,
= 0.0913 = 0.913 × 10−1 ,
= 35391.3 = 0.353913 × 105 ,
= 0.0004 = 0.4 × 10−3 .
Para representarmos um sistema de números em ponto utuante normalizado,
na base
β , com t dígitos signicativos e com limites do expoente m
FN (β, t, m, M ).
número em FN (β, t, m, M ) será representado por:
e
M,
usa-se a
notação:
Um
±0.m−1 m−2 m−3 · · · m−t × β −k
onde
m−1 ̸= 0
e
(1.9)
−m ≤ k ≤ M .
Exemplo 8
Considere o sistema FN (10, 3, −2, 2). Represente nesse sistema os
números do exemplo anterior.
Solução: Os número serão representado por ±0.m−1 m−2 m−3 · · · m−t × β −k , onde
−2 ≤ k ≤ 2. Então:
x1
x2
x3
x4
x5
= 0.53 = 0.53 × 100 ,
= −8.472 = −0.8472 × 101 ,
= 0.0913 = 0.913 × 10−1 ,
= 35391.3 = 0.353913 × 105 ,
= 0.0004 = 0.4 × 10−3 .
Observe que os números x4 = 35391.3 e x5 = 0.0004 não podem ser representados no sistema. De fato, o número 35391.3 = 0.353913 × 105 tem o expoente maior
que 2, causando overow, por outro lado 0.0004 = 0.4 × 10−3 e assim o expoente
é menor que −2 causando underow.
Exemplo 9
malizada.
Diferença entre dois números na aritmética em ponto utuante nor-
0.27143247 · 107
−0.27072236 · 107
0.00071011 · 107
Vemos que a diferença entre estes dois números ponto-utuante normalizados,
resulta num número em ponto-utuante não normalizado. Podemos, entretanto,
normaliza-lo se deslocarmos o ponto três lugares à direita e somar -3 ao expoente,
obtendo-se 0.71011000 · 104 normalizado.
16
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
1.4.6 Armazenamento na memória
Para começar vamos representar o número
mal.
0.00053474839
num computador deci0.53474839 · 10−3 .
A notação ponto-utuante normalizada deste número é
47
Par evitar expoente negativo, nós adicionamos, arbitrariamente, 50 (deslocamento)
ao expoente e o número agora é
0.53474839 · 10
.
O expoente somado a uma
constante arbitrária é chamado de característica. O número pode ser representado,
unicamente, através da normalização da notação ponto-utuante, na memória do
computado utilizando o esquema de representação seguinte:
+
5
3 4 7
4 8
3 9
↘
4 7
↘
sinal
característica = expoente + 50
Deve ser observado que a característica coloca o expoente limitado a expressão
−50 ≤ k ≤ 49.
seguinte:
O número tem o máximo de oito dígitos de precisão e
a representação falha quando temos números muito grande ou muito pequeno. De
modo análogo, um número binário na representação do ponto-utuante também
pode ser armazenado na memória de um computador digital. Uma palavra armazenada tendo um bit de "sinal"e 31 bits regulares pode representar um número
binário ponto-utuante na forma seguinte:
0
1
sinal
8
característica
9
31
mantissa normalizada
onde
sinal = sinal do número codicado, 0 se positivo e 1 se negativo;
característica = 128 + expoente (resultado escrito em binário);
mantissa = fração binária normalizada.
Exemplo 10
Represente o número 12.625 numa palavra de 32 bits conforme esquema de representação acima.
12 2
0 6
0
2
3 2
1 1
Multiplicação
0.625x2 = 1.25
0.25 x2 = 0.50
0.5 x2 = 1.0
12.62510 = 1100.1012 = 0.1100101 × 24
Ajustando a característica: 4 + 128 = 132
Sobra
1
0
1
1.4.
17
COMPUTAÇÕES NUMÉRICAS
132 2
0 66
0
2
33 2
1 16 2
0 8 2
0 4 2
0 2 2
0 1
13210 = 100001002
0
1
0
1
8
0 0
0 0 1
9
0 0
31
1 1
0 0 1
0 1
0......0
1.4.7 Aritmética do ponto-utuante
Os princípios das operações aritméticas básicas de um computador serão discutidos agora. Para isto iremos considerar que estamos trabalhando num computador
decimal com uma palavra de 10 dígitos de comprimento.
Princípios semelhantes
são utilizados em computadores binários (digitais). Na adição ou subtração de dois
números o computador examina a característica ajustada dos dois números.
Os
seguintes casos são possíveis:
1- Características iguais:
Adiciona-se as mantissas e mantém-se a característica.
32109876 54
+12340123 54
44449999 54
2- Quando existe estouro (overow) na adição das mantissas:
O resultado será
ajustado.
51319212 55
+98756431 55
150075643 55
↘
↘
estouro
característica
Resulta em:
15007564 56
↘
característica ajustada
3- Características distintas:
menor valor.
Mantém-se a de maior módulo e ajusta-se a de
18
CAPÍTULO 1.
31411122 55
+12344321 53
ERROS EM COMPUTAÇÕES NUMÉRICAS
−→
31411122 55
+00123443 55
31534565 55
4- Resultado com zero, ou zeros, à esquerda:
34122222 73
−34000122 73
00122100 73
resulta em:
Normaliza-se o resultado.
12210000 71
Na multiplicação e divisão as mantissas e características são tratadas separadamente.
31313142 51
×12315782 65
mantissa
= 0.31313142 × 0.12315782 = 0, 038564583
característica
ajuste
+50
= 51 + 65 − 50 = 66,
onde
−50
é o desconto para compensar o
em cada ajuste do expoente da representação.
A produto é:
31313142 51 × 12315782 65 = 038564583 66
Com a normalização obtém-se o resultado:
38564583 65
1.5 Análise de erros
Resultados exatos dos cálculos são um supremo ideal em análise numérica. Quatro
tipos de erro afetam a exatidão dos cálculos
[1]: erros de modelo, erros de dados,
erros de algoritmos e erros de arredondamento. A maioria da literatura em língua
inglesa faz classicação diferente. Estes erros não são conseqüências de equívocos
ou decisões precipitadas.
Diferente, por exemplo, de erros de programação, eles
são inevitáveis. Em muitos casos eles podem ser antecipados, e requerimentos de
exatidão podem ser impostos, i.e., eles podem ser controlados para permanecerem
abaixo de certos limites de erros. Os limites de erro são parte da especicação do
problema numérico:
≤
|Erros do modelo + erros dos dados + erros de algoritmos + erro de arredondamento|
tolerância
Todos os erros relevantes têm que ser identicados e seus efeitos nos resultados
numéricos devem ser avaliados. Nas seções seguintes os quatro tipos de erros são
caracterizados.
1.5.1 Erros de modelo
Em qualquer processo de modelagem, várias grandezas são desprezadas. O modelo
resultante é uma abstração da realidade e vários modelos podem ser utilizados.
1.5.
19
ANÁLISE DE ERROS
O desvio inevitável entre o modelo e o objeto modelado é denotado por erro de
modelagem. É necessário estimar a magnitude dos efeitos dos erros de modelagem
para garantir os requisitos de tolerância de erro. Normalmente tais estimativas não
são obtidas pois os fatores envolvidos são desconhecidos e não quanticados.
1.5.2 Erro de dados
Geralmente modelos não são para uma aplicação especíca, mas para uma classe
de aplicações similares.
do modelo.
Uma instância é identicada por valores de parâmetros
Por exemplo, o comprimento
constante gravitacional
g
l,
o deslocamento angular inicial
θ
e a
(que depende da localização geográca) são parâmetros
do modelo matemático do pêndulo simples. Devido a medições inexatas e outros
fatores, os valores usados para parâmetros do modelo diferem do verdadeiro valor
(normalmente desconhecido); isto é chamado de erro de dados. Os impactos dos
erros de dados são objetos de análise.
1.5.3 Erro de algoritmo
Quando um problema matemático não pode ser resolvido analiticamente usando
manipulações algébricas, então pode ser tentada uma solução por algoritmo numérico. No desenvolvimento de algoritmos numéricos são feitas simplicações antes
que uma formulação nita do problema possa ser obtida para que o esforço computacional requerido seja reduzido a um nível razoável.
O desvio resultante dos
resultados obtidos pelo algoritmo dos da solução do problema matemático é denotado por erro de algoritmo.
Exemplo:
A solução do sistema de equações
Ax = b,
A ∈ Rnxn ,
requer um esforço computacional proporcional a
b, x ∈ Rn
n3 .
Se uma solução aproximada
x
e
satisfazendo
||Ae
x − b|| < ϵ
é suciente, o custo computacional pode ser reduzido signicativamente. Se
A
não
possui estrutura especial, então somente
k≈
√
κ2
ln(2/ϵ)
,
2
κ2 := ∥A∥2 A−1 2
multiplicações matriz-vetor são necessárias para solução iterativa [3]. O número
κ2
é o número condição euclidiano da matriz A (ver seção 13.8 [1]).
1.5.4 Erro de truncamento
Algoritmos numéricos implantados em um computador podem somente realizar
uma seqüência nita de operações aritméticas (adição, subtração, multiplicação,
divisão e lógicas).
Para calcular funções predenidas
sin, exp, ln, . . .
somente
uma seqüência nita de operações aritméticas são executados pelo computador. O
erro devido a troca de um processo innito por uma seqüência nita de operações
aritméticas é chamado de erro de truncamento.
20
CAPÍTULO 1.
Exemplo 11
ERROS EM COMPUTAÇÕES NUMÉRICAS
A troca da série innita da exponencial:
ex =
∞
∑
xk
k=0
k!
com
Pn (x) =
n
∑
xk
k=0
k!
produz um erro de truncamento
etrunc (x) := Pn (x) − cos(x)
que cresce com a distância entre x e zero.
1.5.5 Erros de discretização
O erro resultante de uma troca de informação contínua por informação discreta,
num processo de amostragem, é referido como erro de discretização. Muitos autores
estendem o termo erro de truncamento para incluir o erro de discretização.
Exemplo 12
O cálculo de uma integral denida
∫
b
I=
f (x)dx
a
são aproximados por somas nitas envolvendo uma malha de pontos xi ∈ [a, b], i =
1, 2, · · · n que pertencem ao conjunto de números de pontos utuantes e as correspondentes avaliações aproximadas das funções {f (x1 ), · · · f (xn )}. Os erros de arredondamento comprometem a exatidão dos resultados quando tenta-se minimizar
os erros de truncamento renando-se a malha de discretização.
1.5.6 Erros de arredondamento
Um computador fornece somente um conjunto nito de números: inteiros, e número
de ponto-utuante com mantissa de comprimento xo. Desta forma as operações
feitas num programa de computador não são geralmente executadas exatamente.
Cada passo mapeia seu resultado em um dos números de ponto-utuante disponíveis, normalmente o mias próximo. A diferença entre o resultado exato e o resultado
arredondado de uma operação á chamado de erro de arredondamento. O efeito dos
erros de arredondamento acumulados sobre o resultado nal do método de aproximação é chamado de efeito de erro de arredondamento.
1.5.7 Estudo de caso
É interessante ilustrar diferentes tipos de erro mais explicitamente [13]. Suponha
que se quer computar
por
x
e
f (x) para um dado x real.
No cálculo prático
x é aproximado
x
e − x é o erro
pois o computador tem uma palavra nita. A diferença entre
inicial, enquanto ϵ1
f
= f (e
x)−f (x) é o erro propagado correspondente. Normalmente
f1 (freqüentemente uma expansão em série
truncada). A diferença ϵ2 = f1 (e
x) − f (e
x) é o erro de truncamento. Os
é trocado por uma função mais simples
de potência
cálculos são feitos por um computador, portanto não são operações exatas.
realidade calculamos
f2 (e
x)
no lugar de
f1 (e
x),
Na
o qual é um valor calculado errado
1.6.
21
PROPAGAÇÃO DE ERROS
de uma função errada com argumento errado. A diferença
ϵ3 = f2 (e
x) − f1 (e
x)
é o
erro de arredondamento propagado. O erro total é
ϵ = f2 (e
x) − f (x) = ϵ1 + ϵ2 + ϵ3 .
Exemplo 13
Calcular e1/3 fazendo todos os cálculos com 4 decimais. (Obs. Os
cálculos foram feitas com uma calculadora)
ϵ1 = e0.3333 − e1/3 = −0.000465196
ex ≈ f1 (x) = 1 +
para xe = 0.3333
(
ϵ2 = f1 (e
x) − f (e
x) = −
x2
x3
x4
x
+
+
+
1!
2!
3!
4!
)
0.33336
0.33335
+
+ · · · = −0.0000362750
5!
6!
f2 (e
x) = 1 + 0.3333 + 0.0555 + 0.0062 + 0.0005 = 1.3955
f1 (e
x) = 1.3955296304 obtidos com 10 decimais
ϵ3 = −0.0000296304
ϵ = 1.3955 − e1/3 = ϵ3 + ϵ3 + ϵ3 = −0.0001124250
1.6 Propagação de erros
Os erros são denidos como absoluto e relativo. Se
x
é o número exato e
x
e
uma
aproximação, então temos:
Erro absoluto : ϵ = |x − x
e|
e
ϵ x
e Erro relativo : = x − ,
x
x
(1.10)
(1.11)
n desprezando-se todos os dígin é deixado inalterado ou acrescido
de uma unidade se o dígito da posição n + 1 é um número menor que 5 ou maior
que 5. Se o número na posição n + 1 for igual a 5, o digito na posição n é acrescido
Um número decimal é arredondado na posição
tos à direita desta posição. O dígito na posição
de uma unidade se ele for par e é deixado inalterado se for impar ( a regra pode
ser o contrário: o digito na posição
n
é acrescido de uma unidade se ele for impar
e é deixado inalterado se for par ) . Frequentemente é feito o truncamento para
decimais onde todos os dígitos além da posição n são simplesmente desprezados.
n
22
CAPÍTULO 1.
Exemplo 14
ERROS EM COMPUTAÇÕES NUMÉRICAS
3.1415926535
Arredondamento:
3.14 (2d)
3.141 (3d)
3.1416 (4d)
3.1415927 (7d)
onde (nd) = número de casas decimais.
Pode-se dizer de forma simplória que dígitos signicativos são aqueles que têm
informação sobre a dimensão do número sem contar com a parte exponencial. Naturalmente um dígito
d
localizado mais à esquerda tem mais informação do que
um mais à direita. Quando um número é escrito com somente seus dígitos signicativos estes formam uma cadeia de símbolos que começa com o primeiro dígito
diferente de zero. Portanto se a parte fracionária termina com um ou vários zeros,
eles são signicativos por denição.
Se o número é inteiro e termina com zeros,
somente com o conhecimento da situação é que podemos decidir se eles são signicativos ou não. Por exemplo,
8630574 escrito com 4 dígitos signicativos é 8630000.
Em muitos casos nós estimamos o erro de uma função
erros individuais nas variáveis
(x1 , x2 , ..., xn )
f (x1 , x2 , . . . , xn )
com
conhecidos. Nós encontramos direta-
mente que
∆f =
∂f
∂f
∂f
∆x1 +
∆x2 + · · · +
∆xn
∂x1
∂x2
∂xn
(1.12)
onde os termos de ordem superior foram desprezados. O erro máximo é dado por
∂f ∂f ∂f |∆xn |
|∆f | = |∆x1 | + |∆x2 | + · · · + ∂x1 ∂x2 ∂xn (1.13)
O limite superior do erro é geralmente bastante pessimista, em computações práticas os erros têm uma tendência a cancelar [13]. Por exemplo, se
20000
números
são arredondados com quatro casa decimais e adicionados, o erro máximo é
1
× 10−4 × 20000 = 1
2
O experimento com simulação Monte Carlo abaixo demonstra que a
previsão acima é pessimista para o cenário examinado.
Exemplo 15
x
y
Cálculo de z = .
Se xe = x + δ e ye = y + γ são duas aproximações para os números exatos x e y .
( )
x
x
e
x+δ
Calcula-se z =
= =
+ϵ
y arredondado
ye
y+γ
então
1
x
z̃ ∼
=z+ ·δ− 2 ·γ+ϵ
y
y
1.6.
23
PROPAGAÇÃO DE ERROS
Caso A:
x=8
δ = 0.009
x
e=x+δ
y=5
δ = 0.04
ye = y + γ
x
= 1.6
y
x
e
= 1.589
ye
z+
1
x
· δ − 2 · γ + ϵ = 1.589
y
y
Caso B:
x=8
δ = −0.07
x
e=x+δ
y=5
δ = 0.08
ye = y + γ
x
= 1.6
y
x
e
= 1.561
ye
z+
1
x
· δ − 2 · γ + ϵ = 1.56
y
y
O erro em z̃ é constituído dos erros propagados de x e y acrescido de um novo
erro de arredondamento.
1.6.1 Cancelamento numérico
Devido ao comprimento limitado das palavras em computadores, e em conseqüência
do uso da aritmética do ponto-utuante com representação normalizada, as leis da
aritmética elementar não são satisfeitas. Os efeitos do uso da aritmética do pontoutuante serão vistos em alguns exemplos que seguem.
Os exemplos a seguir violam a lei associativa da adição:
Exemplo 16
(usando-se uma máquina com quatro dígitos decimais na mantissa
da representação)
x = 9.909 y = 1.000 z = −0.990
(x + y) + z = 10.90 + (−0.990) = 9.910
x + (y + z) = 9.909 + (0.010) = 9.919
Exemplo 17
(usando-se uma máquina com quatro dígitos decimais na mantissa
da representação)
24
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
x = 4561 y = 0.3472
(y + x) − x = (−0.3472 + 4561) − 4561 = 4561 − 4561 = 0.0000
y + (x − x) = 0.3472 + (4561 − 4561) = 0.3472 + 0.0000 = 0.3472
Vejamos agora um exemplo (usando-se uma máquina com quatro dígitos decimais na mantissa da representação) que viola a lei distributiva.
Exemplo 18
x = 9909 y = −1.000 z = 0.999
(x × y) + (x × z) = −9909 + 9899 = −10.00
x × (y + z) = 9909 × (−0.0001) = −9, 909
Exemplo 19
x1 =
b+
A equação do segundo grau x2 − b · x + ϵ = 0 tem duas soluções:
√
√
b2 − 4ϵ
b − b2 − 4ϵ
e x2 =
2
2
Se b < 0 e ϵ << b , x2 é expresso como a diferença de dois números praticamente iguais e poderá perder muitos dígitos signicativos.
Se x2 for reescrito como:
x2 =
ϵ
2ϵ
√
=
x1
b + b2 − 4ϵ
a raiz é aproximadamente
ϵ
sem perda de dígitos signicativos.
b
Usando-se uma máquina com quatro dígitos decimais na mantissa da representação:
b = 300.0 e ϵ = 1.000
√
90000 − 4.000 = 300.0
600.0
= 300.0
2.000
300.0 − 300.0
0.0000
x2 =
=
= 0.0000
2.000
2.000
1.000
ϵ
=
= 0.0033 é um resultado mais preciso.
usando a relação x2 =
x1
300.0
x1 =
Exemplo 20
x
e
. Se quisermos
Sabe-se que para x grande senh(x) ∼
= cosh(x) ∼
=
2
calcular e−x podemos dizer que e−x = cosh(x) − senh(x), o que conduz a um
1
cancelamento perigoso. Por outro lado e−x =
fornece resultados
mais precisos.
cosh(x) + senh(x)
1.6.
25
PROPAGAÇÃO DE ERROS
1.6.2 Aritmética intervalar
O cálculo de erro de arredondamento estimado por aproximação de primeira ordem, descrito no nal da indrodução da seção 1.6 acima, são inviáveis para serem
utilizados em métodos numéricos típicos onde o número de operações aritméticas é
muito grande para permitir uma estimativa satisfatória do efeito total de todos os
erros de arredondamentos.
A aritmética intervalar é uma alternativa para determinar limites para o erro
absoluto de um algoritmo, considerando todos erros de dados e arredondamento.
[x] = [x, x]
x, x ∈ F, em vez de números reais simples x. As
+, −, ×, ÷ são denidas através de intervalos. Algoritmos
A aritmética intervalar faz cálculos sistemáticos através de intervalos
limitados de números de máquinas
operações aritméticas
intervalares são implementados em computadores produzindo resultados intervalares garantidos conterem a solução desejada.
A aritmética intervalar deve ser usada com bastante senso crítico, caso contrário os resultados conáveis de limites de erro serão, na maioria das vezes, muito
pessimísticos.
Exemplo 21
Calcule y = x3 − 3x2 + 3x para [x] = [0.9, 1.1] ?
Pelo esquema de Horner
y = ((x − 3)x + 3)x
[y] = [0.6209, 1.4191] (muito largo)
usando
y = 1 + (x − 1)3
[y] = [0.9989, 1.0011] (resultado ótimo)
Para o sucesso da aplicação da aritmética intervalar é necessário desenvolver
novos algoritmos que produzam limites de erros aceitáveis. Um tratamento mais
profundo da aritmética intervalar pode ser visto em Moore [5], Alefeld [6] e Kulish [7]
(para inclusão dos arredondamentos direcionados da aritmética de ponto utuante).
1.6.3 Estimativa estatística de erros de arredondamento
Para obtenção de estimativas estatísticas de erros de arredondamento relativo (ver
Rademacher [8]) que é causado por uma operação elementar, seus resultados são
considerados uma variável aleatória no intervalo
[−eps, eps]
onde
|ϵ| ≤ eps
. Alem
disso assume-se que os erros de arredondamento atribuídos as operações diferentes
2
são variáveis independentes. Por µϵ e σϵ denota-se o valor esperado e variância da
distribuição do arredondamento. Eles satisfazem as seguintes relações gerais
σϵ2 = E(ϵ − E(ϵ))2 = E(ϵ2 ) − ((E(ϵ))2 = µϵ2 − µ2ϵ
Assumindo uma distribuição uniforme no intervalo
µϵ := E(ϵ) = 0,
σϵ2 = E(ϵ2 ) =
1
2 eps
∫
[−eps, /eps],
eps
t2 dt =
−eps
obtém-se
1
eps2 =: ϵ−2
3
(1.14)
Exames rigorosos mostram que a distribuição de arredondamento não é muito
uniforme (ver Sterbenz [9]).
Deve-se ter em mente que o padrão ideal do erro
26
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
de arredondamento é somente uma aproximação do padrão observado em cálcu2
los computacionais, assim os as estimativas de µϵ e σϵ devem ser determinadas
empiricamente. Os resultados x dos algoritmos estando sujeitos a erros de arredondamento aleatórios tornam-se variaríeis aleatórias com valor esperado
σx2 satisfazendo a mesma relação básica
µx e variância
σx2 = E(x − E(x))2 = E(x2 ) − ((E(x))2 = µx2 − µ2x
Os efeitos da propagação de erros de arredondamento das operações elementares
são descritas pelas seguintes fórmulas para variáveis aleatórias independentes
e constantes
x, y
α, β ∈ R:
µαx±βy = E(αx ± βy) = αE(x) ± βE(y) = αµx ± βµy
2
σαx±βy
= E((αx ± βy)2 ) − (E(αx ± βy))2
= α2 E(x − E(x))2 + β 2 E(y − E(y))2 = α2 σx2 + β 2 σy2
(1.15)
A primeira fórmula acima resulta da linearidade do valor esperado. Ela é valida
para variáveis aleatórias
E(y),
que é satisfeita se
x, y .
xey
A segunda fórmula segue da relação
E(xy) = E(x) ·
são independentes. Assim
µx×y = E(x × y) = E(x)E(y) = µx µy
2
= E(x × y − E(x)E(y))2 = µx2 µy2 − µ2x µ2y
σx×y
= σx2 σy2 + µ2x σy2 + µ2y σx2
(1.16)
Alem disso os valores esperados µx são trocados por valores estimados x e
ϵ2x = σx2 /µ2x ≈ σx2 /x2 são considerados, então de (1.15) e (1.16):
variâncias relativas
z = x + y ou z = x − y :
z = x × y ou z = x ÷ y :
ϵ2z =
˙ ( xz )2 ϵ2x + ( yz )2 ϵ2y + ϵ̄2
ϵ2z =
˙ ϵ2x + ϵ2y + ϵ̄2
Os limites de erros para o resultado nal r de uma computação numérica são
2
obtidos da variância relativa ϵr , assumindo que o erro nal tem distribuição normal.
Esta suposição é justicada uma vez as distribuições dos erros propagados tendem
a ser normal se sujeitas as muitas operações elementares. Supondo o resultado nal
ser normal, o erro relativo do resultado nal
r
é limitado com probabilidade 0.9 por
2ϵr
1.7 Padronização do sistema de números de ponto
utuante
Padrões internacionais são desenvolvidos pelo ISO (International Standardization
Organization) com suas organizações nacionais aliadas de padronização (ABNT
- Associação Brasileira de Normas Técnicas) .
Um caso especial é o campo da
engenharia elétrica e eletrônica, na qual os padrões são desenvolvidos pela IEC (International Electrotecnical Commission).
Nos anos 70 tentou-se desenvolver padrões para a aritmética de ponto utuante
binária para microcomputadores. Um dos principais objetivos era tornar programas
mias portáveis para que técnicas de programação particulares usadas para tratar
1.7.
27
PADRONIZAÇÃO DO SISTEMA DE NÚMEROS DE PONTO FLUTUANTE
erros de arredondamento exceções (e.g.
, overow de expoentes) fossem efetivas
para arquiteturas de computadores diferentes.
Após lenta negociação, a sociedade americana de computadores IEEE (Institute
of Electrical and Eletronics Engineers) adota o padrão IEE 754-1985, o padrão para
a aritmética de ponto utuante binária (abreviadamente IEEE-754).
Em 1984 o
IEC decide considerar este padrão nacional um padrão internacional , IEC 559:1989
da aritmética de ponto utuante para sistemas de microcomputadores. O padrão
relacionado IEEE 854-1987 generaliza 754 para cobrir tanto decimal como binário.
Padrão IEEE 754 ponto utuante é a representação mais comum hoje em dia
para os números reais em computadores, incluindo PC com processador Intel, Macintoshes e a maioria das plataformas Unix.
1.7.1 O que são os números em ponto utuante?
Existem várias maneiras de representar números reais em computadores. A representação do ponto xo coloca um ponto (potência) em algum lugar no meio dos
dígitos, e é equivalente ao uso de números inteiros que representam partes de unidades. Por exemplo, pode representar um centésimo (1/100) de uma unidade, com
quatro dígitos decimais, pode-se representar
32.45
ou
00.03.
Outra possibilidade é
usar racionais e representar cada número como a razão entre dois inteiros.
A representação de ponto utuante - a solução mais usual - basicamente representa reais em notação cientíca. A notação cientíca representa os números como
um número de base e um expoente. Por exemplo, 123.123 pode ser representado
2
como 1.23123 × 10 . Em hexadecimal, o 123.FAC número pode ser representado
2
como 1.23FAC × 16 .
A representação de ponto utuante resolve alguns problemas de representação.
O Ponto xo tem uma janela xa de representação, o que limita de representar
números muito grandes ou muito pequenos. O ponto xo é propenso a uma perda
de precisão quando dois grandes números são divididos.
A representação de ponto utuante emprega uma janela deslizante de precisão adequada à escala do número.
0, 0000000000000001
e
Isso permite que ele represente números de
1.000.000.000.000
com facilidade.
1.7.2 Esquema de armazenamento
Os números de ponto utuante IEEE tem três componentes básicos: o sinal, o expoente e a mantissa. A mantissa é composta por fração e um dígito líder implícito
(explicado abaixo). A base do expoente (2) é implícita e não precisa ser armazenado.
A tabela a seguir mostra os esquemas de armazenamento de precisão simples
(32 bits) e precisão dupla (64 bits)s de ponto utuante.
cada campo são mostradas (intervalo dos
bits
O número de
estão entre colchetes):
bits
para
28
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
Precisão
Sinal
Expoente
Fração
Simples
1 [0]
8 [1-8]
23 [9-31]
Deslocamento
127
Dupla
1 [0]
11 [1-11]
52 [12-63]
1023
Gracamente:
0
sinal
1
8
9
31
característica
mantissa
e
0
sinal
1
11
12
63
característica
mantissa
O bit de sinal
O bit de sinal é simples:
0
denota um número positivo;
1
denota um número
negativo. Invertendo-se o valor deste bit inverte o sinal do número.
O expoente
O campo de expoente precisa representar expoentes positivos e negativos.
Para
fazer isso, um deslocamento é adicionado ao verdadeiro expoente, a m de se obter
o expoente de armazenamento. Para IEEE de precisão simples, este valor é de 127.
Assim, um expoente zero signica que 127 é armazenado no campo de expoente.
Um valor armazenado de 150 indica um expoente de (150-127), ou 23. Por razões
apresentadas mais tarde,os expoentes de
−127 (todos bits 0's) e 128 (todos bits 1's)
são reservados para números especiais. Para precisão dupla, o campo de expoente
tem
11
bits e um deslocamento de
1023.
A mantissa
A mantissa, também conhecida como o signicando, representa os
bits
de precisão
do número. É composto de um bit implícito e os bits da fração.
Para saber o valor do bit líder implícito, considerar que qualquer número pode
ser expresso em notação de ponto utuante de muitas maneiras diferentes.
exemplo, o número
4957
Por
pode ser representado por qualquer uma dessas:
4957 × 100
0.4957 × 104
4.957 × 103
0.004957 × 106
Para maximizar a quantidade de números representáveis, os números de ponto
utuante são normalmente armazenados na forma normalizada. Na forma norma3
lizada 4957 é representado como 4.957 × 10 .
Uma otimização pequena e agradável está disponível na base dois, já que a
única forma possível do dígito zero é 1.
Pode-se supor apenas um dígito de
1,
29
1.7.
PADRONIZAÇÃO DO SISTEMA DE NÚMEROS DE PONTO FLUTUANTE
e não precisa-se representá-lo explicitamente.
efetivamente
24 bits
de resolução com fração de
Como resultado, a mantissa tem
23 bits.
Ressumindo:
1. O
bit
de sinal é
0
para positivo,
1
para o negativo.
2. A base do expoente é dois.
3. O campo de expoente contém
simples ou
1023
4. O primeiro
bit
127
mais o verdadeiro expoente de precisão
mais verdadeiro para o expoente de precisão dupla.
da mantissa é geralmente assumida como
campo fração de
bits.
1.f ,
onde
f
é o
Intervalo de números de ponto utuante
O intervalo de números positivos de ponto utuante podem ser divididos em números normalizados (que preserva toda a precisão da mantissa), e os números desnormalizados (discutido mais tarde) que usam apenas uma porção de precisão da
mantissa.
•
Números positivos normalizados são denidos dentro da faixa de:
2(1−deslocamento) até (2 − 2−precisão ) × 2deslocamento .
•
Números negativos normalizados são denidos dentro da faixa de:
−2(1−deslocamento) até −(2 − 2−precisão ) × 2deslocamento .
•
Números positivos normalizados superiores
números negativos normalizados inferiores
são transbordados (
•
overows ).
(2 − 2−precisão ) × 2deslocamento e
−(2 − 2−precisão ) × 2deslocamento
2(1−deslocamento) e
1−deslocamento
que −2
são
Números positivos normalizados menores que
números negativos normalizados maiores
entes (
underows ).
Precisão
Simples
Dupla
Desnormalizados
±2−149 ≈ ±10−44.85 até
(1 − 2−23 ) × 2126 ≈ 1037.93
±2−1074 ≈ ±10−323.31 até
(1 − 2−52 ) × 21022 ≈ 10307.65
insuci-
Normalizados
±2−126 ≈ ±10−37.93 até
(2 − 2−23 ) × 2127 ≈ 1038.53
±2−1022 ≈ ±10−307.65 até
(2 − 2−52 ) × 21023 ≈ 10308.25
Dado que o sinal dos números de ponto utuante é dado por um
bit
líder especial,
o intervalo de números negativos é dado pela negação dos valores acima.
Há cinco diferentes intervalos numéricos que a precisão simples de números de
ponto utuante não são capazes de representar:
•
Números negativos menores do que
•
Números negativos maiores do que
•
Zero.
•
Números positivos menores do que
−(2 − 2−23 ) × 2127 .
−2
−149
underow
. (
2−149 . (underow
(overow negativo)
negativo)
positivo)
30
CAPÍTULO 1.
•
ERROS EM COMPUTAÇÕES NUMÉRICAS
Números positivos superiores à
(2 − 2−23 ) × 2127 .
(overow positivo)
Overow signica que os valores são muito grande para a representação, e assim,
Underow é um problema
da mesma forma que os inteiros podem transbordar.
menos grave, porque ele apenas denota uma perda de precisão, que é garantido ser
muito próximo de zero.
Segue uma tabela com o intervalo efetivo (excluindo valores innitos) de números IEEE de ponto utuante:
Precisão
Simples
Dupla
Binário
±(2 − 2−23 ) × 2127
±(2 − 2−52 ) × 21023
Decimal
≈ ±1038.53
≈ ±10308.25
Observação 3
Note-se que os valores extremos ocorrem (independentemente do
sinal), quando o expoente é o valor máximo para os números nitos (2127 para
precisão simples, 21023 para o dupla), e, a mantissa está completa de 1's (incluindo
1 bit da normalização).
1.7.3 Valores Especiais
IEEE reserva valores do campo expoente com todos
0's e 1's para representar todos
os valores especiais no sistema de ponto utuante.
Zero
Como mencionado acima, o zero não é diretamente representável no formato direto,
devido à suposição de um
1 à esquerda (que seria preciso especicar numa mantissa
zero real para produzir o valor de zero). Zero é um valor especial denotado com
um campo de expoente zero e um campo de mantissa zero. Observe que
−0 e 0 são
valores distintos, embora ambos são comparados como iguais.
Desnormalizados
Se o expoente é todo de
0's,
mas a mantissa for diferente de zero (o que poderia
ser interpretado como zero), então o valor é um número desnormalizado, que não
tem um líder assumido
(−1)s × 0.m × 2−126 ,
1
antes do ponto binário. Portanto representa um número
onde s é o
bit
m é a mantissa. Para precisão dupla,
(−1) × 0.m × 2−1022 . A partir disto se pode
de sinal e
s
desnormalizada números são da forma
interpretar o zero como um tipo especial de número desnormalizado.
Innito
Os valores (+)innito (+∞) e (-)innito (−∞), são indicados com um expoente de
1's
e uma mantissa de
0's.
O
bit
de sinal faz a distinção entre innito positivo e
innito negativo. Ser capaz de denotar o innito como um valor especíco é útil
overow ).
porque permite as operações para tratar de situações de estouro (
operações com valores innitos são bem denidas no IEEE de ponto utuante.
As
1.7.
31
PADRONIZAÇÃO DO SISTEMA DE NÚMEROS DE PONTO FLUTUANTE
Não é um número
Not a Number ) é usado para representar um valor que não representa
bits com um expoente
O valor NaN (
um número real. NaN são representados por um padrão de
de
1's
Quiet
(
e uma mantissa diferente de zero. Existem duas categorias de NaN: QNaN
NaN) e SNaN (Sinalização NaN).
A QNaN é um NaN com o conjunto mais signicativo de
bits
na mantissa.
QNaN propaga livremente através da maioria das operações aritméticas. Estes valores saltam de uma operação quando o resultado não é denido matematicamente.
Um SNaN é um NaN com o bit mais signicativo da mantissa limpa.
Ela é
usada para sinalizar uma exceção quando utilizado em operações. SNaN pode ser
útil para atribuir a variáveis não inicializadas como armadilha de uso prematuro.
Semanticamente, QNaN denotam operações
indeterminadas,
enquanto SNaN
denotam operações inválidas.
1.7.4 Parâmetros de um sistema de número de ponto-utuante
A notação de um sistema de ponto utuante é
F(β, t, m, M, dnorm)
Quatro parâmetros e um valor booleano:
1. Base:
β≥2
2. Precisão:
t≥2
3. menor expoente:
m<0
4. maior expoente:
M >0
5. indicador de normalização: dnorm
∈ booleano
caracterizam cada sistema de números IEEE/IEC
dnorm
= true caso o sistema contenha
números denormalizados (sub-normal)
= false para o sistema normalizado
A notação de um sistema de ponto utuante
F(β, t, m, M, dnorm)
satisfaz
as seguintes relações
F(b, p, emin , emax , true) = FN (b, p, emin , emax ) ∪ FD (b, p, emin , emax )
F(b, p, emin , emax , f alse) = FN (b, p, emin , emax ).
Exemplo 22
(Intel) De acordo com a norma IEC/IEEE os sistemas de numeração
utilizados nos microprocessadores Intel são F(2, 24, −125, 128, true) e F(2, 53, −1021, 1024, true)
para precisão simples e precisão dupla. Microprocessadores Intel têm precisão estendida F(2, 64, −16381, 16384, true).
32
CAPÍTULO 1.
Exemplo 23
ERROS EM COMPUTAÇÕES NUMÉRICAS
(IBM System/390) Fornece três sistemas de numeração hexadecimal
F(16, 6, −64, 63, f alse) para short precision, F(16, 14, −64, 63, f alse)
cision e F(16, 28, −64, 63, f alse) para extended precison.
para long pre-
Exemplo 24
(Cray) Fornece dois sistemas de numeração F(2, 48, −16384 , 8191, f alse)
e F(2, 96, −16384, 8191, f alse).
Exemplo 25
(Calculadoras) Calculadoras cienticas são normalmente fornecidas
com um único sistema de numeração F(10, 10, −98, 100, f alse). Algumas trabalham
com maior precisão interna enquanto exibem somente dez casas decimais.
Exemplo 26
Sabemos que os números reais podem ser representados por uma reta
contínua. Entretanto, em ponto utuante podemos representar apenas pontos discretos da reta real. Para ilustrar este fato consideremos o seguinte exemplo.
Quantos e quais números podem ser representados no sistema FN (2, 3, 1, 2)?
Solução: Temos que β = 2 então os dígitos podem ser 0 ou 1; m = 1 e M =
2 então −1 ≤ k ≤ 2 e t = 3. Então os números são da forma:
±0.m1 m2 m3 × β k .
Tem-se duas possibilidades para o sinal, uma possibilidade para m1 , duas para
m2 , duas para m3 e quatro para as formas de β k . Fazendo o produto 2 · 1 · 2 · 2 · 4
obtém-se 32. Portanto neste sistema pode-se representar 33 números visto que o
zero faz parte de qualquer sistema. Para responder quais são os números lista-se
as formas da mantissa: 0.100, 0.101, 0.110 e 0.111 e as formas de β k são: 2−1 , 20 ,
21 e 22 . Tem-se então os seguintes números:
 
0.25(10)
2−1
 20   0.5(10)
 
0.100(2) × 
 21  =  1.0(10)
22
2.0(10)





desde que 0.100(2) = 0.5(10) ;

 
2−1
0.3125(10)
 20   0.625(10)
 
0.101(2) × 
 21  =  1.25(10)
2.5(10)
22




desde que 0.101(2) = 0.625(10) ;

 
2−1
0.375(10)
 20   0.75(10)
 
0.110(2) × 
 21  =  1.5(10)
3.0(10)
22
desde que 0.110(2) = 0.75(10) ;




1.8.
33
PROGRAMAS DE PRECISÃO MÚLTIPLA
 
2−1
0.4375(10)
 20   0.875(10)
 
0.111(2) × 
 21  =  1.75(10)
3.5(10)
22





desde que 0.111(2) = 0.875(10) ;
Exemplo 27
Considerando o mesmo sistema do exemplo 26, represente os números: x1 = 0.48, x2 = 4.8 e x3 = 0.18 dados na base 10.
Solução:
Fazendo os cálculos obtemos que: 0.4810 = 0.111 × 2−1 , 4.810 =
0.100 × 2 e 0.1310 = 0.100 × 2−2 . Apenas o primeiro número pode ser representado
no sistema, pois para o segundo teremos overow e para o terceiro underow.
Observe que o número 0.4810 tem no sistema dado, a mesma representação que o
número 0.4375(10) .
3
1.8 Programas de precisão múltipla
Em certas aplicações o sistema de ponto utuante fornecido pelo computador tem
precisão ou intervalo insuciente.
Se os cálculos são feitos em precisão simples,
então se usa precisão dupla para tentar remediar diculdades e, se ainda assim, a
precisão dupla é insuciente, tenta-se a precisão estendida. Contudo esta estratégia
prejudica a portabilidade dos programas, pois poucos sistemas de computadores
fornecem mais que dois níveis de precisão.
Além disso, esta estratégia é de uso
limitado: existem raramente quatro níveis, então o nível de precisão pode não ser
adaptado aos requisitos de uma aplicação particular. Uma solução é o uso de um
software de precisão múltipla (Maple, Matlab, etc.)
, que permite aumentar a
precisão independente da arquitetura.
Estes softwares permitem uma escolha exível da precisão e/ou intervalo necessário dos números de ponto utuante. A desvantagem mais séria das implementações de sistemas de numeração via software comparada a hardware é o tempo de
processamento (crescimento em tempo de execução por um fator > 100 [10]
1.9 A inuência da aritmética do ponto utuante
Os problemas com o uso da aritmética de ponto utuante são fartamente discutido
na literatura, o artigo [11] é clássico. A seguir veremos alguns casos selecionados.
n
n
Para resolver um sistema de equações na linear, a função f : R → R deve ser
implementada na forma de um (sub)programa. Então os zeros da implementação
f˜ : Fn → Fn são determinados, em vez da função matematicamente denida f . O
termo zero perde seu signicado comum mesmo no caso de funções de uma variável
(n = 1)
porque a equação
f˜(x) = 0
com f˜ : F → F
pode ter várias soluções (zeros) ou nenhuma solução na vizinhança de um zero
isolado da função original.
Exemplo 28
(zeros não encontados[12], pag. 279)
34
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
Figura 1.1: Planilha do software matemático Mathcad usada para traçar o
gráco da função f (x) = 3x2 + π14 ln(π − x)2 + 1. A função não tem zeros
quando calculada numericamente com F(2, 53, −1021, 1024, true) (analiticamente tem dois)
A função
1
(1.17)
ln(π − x)2 + 1
π4
Tem duas raízes no intervalo [3.14, 3.15]; ϵ1 ∈ [3.14, π] e ϵ2 ∈ [π, 3.15]. Estes
f (x) = 3x2 +
zeros não podem ser determinados numericamente, desde que
f (x) > 0
Para todo x ∈ F(2, 53, −1021, 1024, true) para a qual 1.17 pode se calculado. Os
dois zeros de f ,
x∗1 ≈ π − 10−647 e x∗2 ≈ π + 10−647
estão localizados muito próximos de π , e f (x) ≤ 0 é valido somente no intervalo
localizado entre dois números de máquina. A implementação f˜ : F → F não possui
zeros (ver gura 1.1).
Exemplo 29
(grande número de zeros [12], pag. 279 )
O polinômio
P7 (x) = x7 − 7x6 + 21x5 − 35x4 + 35x3 − 21x2 + 7x − 1 =
= ((((((x − 7) + 21)x − 35)x + 35)x − 21)x + 7)x − 1 = (x − 1)7
tem somente um zero em x∗ = 1. A implementação de P̃7 : F → F usando o
esquema de Horner tem milhares de zeros na vizinhança de x = 1 [cálculo com
1.9.
A INFLUÊNCIA DA ARITMÉTICA DO PONTO FLUTUANTE
35
F(2, 24, −125, 128, true), i.e., com uma aritmética de precisão simples IEC/IEEE];
para x > 1 existem milhares de pontos com valores P̃7 < 0, embora P̃7 > 0 nesta
região e, similarmente, para x < 1 existem milhares de pontos com valores P̃7 > 0,
embora P̃7 < 0 nesta região. A fenômeno do Caos surge do cancelamento dos dígi-
tos mais signicativos (ver gura 4.10 e 4.11 [1], pag 145).
Exemplo 30
(solução do sistema linear inspirado em [12], pag. 233)

8 3
0

 7 8 3




7 8 3


 e

.
.
.
A=



.
.
.



7 8 3 
0
7 8






b=




11
18
18
.
.
18
15










A gura 1.2 mostra uma planilha Mathcad para resolução do sistema linear
Embora o residual seja praticamente zero para todos as componentes do
vetor solução,
 temos um resultado numericamente insatisfatório:
A · x = b.




x=




1
1
1
·
·
1
1




 = solução EXATA !




Obs. A função verifylss do Matlab
acordo.
Exemplo 31
Intlab toolbox produziu os resultados de
(avaliação de função)
Abaixo vamos avaliar a função f (x, y) = 333.75 ∗ y 6 + x2 ∗ (11 ∗ x2 ∗ y 2 − y 6 −
121 ∗ y 4 − 2) + 5.5 ∗ y 8 + x/(2 ∗ y) usando o Maple com precisão variada. A gura
1.3 mostra a planilha Maple onde só a partir de 37 dígitos é que os resultados
apresentados são numericamente válidos.
36
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
Figura 1.2: Software matemático Mathcad usado na solução do sistema linear
Figura 1.3: Software matemático Maple usado na avaliação da função
f (x, y) = 333.75 ∗ y 6 + x2 ∗ (11 ∗ x2 ∗ y 2 − y 6 − 121 ∗ y 4 − 2) + 5.5 ∗ y 8 + x/(2 ∗ y)
1.10.
37
EXERCÍCIOS PROPOSTOS
1.10 Exercícios Propostos
1) Converta os seguintes números decimais para sua forma binária:
a)
g)
35
2000
b)
h)
2345
655
c)
i)
0.1218
722
d)
j)
67.67
3.6 × 1021
e)
l)
95
231
f)
2500
2.5 × 10−18
m)
2) Converta os números binários para suas formas octal, hexadecimal e decimal:
1011012
0.1111111012
g) −111010110112
j) 0.0011001012
−1101010112
0.00001012
h) −0.11000012
a)
b)
c)
d)
e)
f)
i)
−0.11012
101012
0.1011001111012
3) Reescreva os números seguintes na representação do ponto-utuante normalizada:
a)
e)
27.534
11.01112
b)
f)
−89.901
−111.01012
18 × 1021
g) 0.001012
c)
d)
h)
1.3756 × 10−7
1110101012
4) Seja o número seguinte em ponto-utuante num computador de 32 bits:
0010.0101.0000.0001.0001.1001.1100.1110
Se o primeiro bit é o sinal do número, os oito seguintes a característica obtida
com adição de 128 ao expoente do número ponto-utuante, e os 23 restantes são a
mantissa, responda às questões seguintes:
a) O número está normalizado? Se não o normalize.
b) Qual o sinal do número?
c) O valor absoluto do número é menor que 1?
5) Repita a questão 4 com o número:
1000.0000.0110.1101.1010.1101.1011.0110
6) Para a representação da questão 4, quais são aproximadamente o maior e o
menor número, o menor número positivo e o próximo menor número positivo.
7) Represente os números binários da questão 2 na maquina binária que utiliza
o seguinte esquema de representação de ponto-utuante:
↘
sinal
↘
mantissa
↘
característica
a) o bit de sinal é codicado 0 se o número é positivo e 1 se o número é negativo.
b) a característica é obtida com adição de 128 ao expoente do número pontoutuante.
38
CAPÍTULO 1.
ERROS EM COMPUTAÇÕES NUMÉRICAS
8) Converter para base 10 os valores representados na máquina binária da questão 7) acima:
a)
1
1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
1
0
1
1
1
0
0
0
0
0
0
0
0
1
1
1
0
0
1
0
1
b)
0
9) Seja um sistema de aritmética de ponto-utuante na base decimal com quatro dígitos na mantissa e dois na característica, 1 digito de sinal da mantissa e 1
digito sinal da característica.
↓ mantissa ↓ expoente
sinal
sinal
da mantissa do expoente
O sinal é codicado (+) se o número é positivo e (-) se o número é negativo.
Dados os números:
x = 0.77237
y = 0.2145 × 10−3
z = 0.2585 × 101
Efetue as seguintes operações:
a) x + y + z
b) x − y − z
c) x/y
d) (xy)/z
e) x(y/z)
10) Use a aritmética do ponto-utuante, com a representação da questão
9 acima, para somar e subtrair os seguintes pares de números:
a) 5.414234 e 2.27531 b) 5.414234 e 22.7531
c) 54.67 e 0.328
d) 5.4 × 10−8 e 3.14 × 10−5
11) Use a aritmética do ponto-utuante, com a representação da questão
9 acima, para realizar as operações aritméticas seguintes:
a) 3.14 × 7.47 b) 75.81 × 8.15 c) 1.35 ÷ 28.5 d) 4000 ÷ 150
12) Calcular as cotas dos erros absolutos e relativos que se comete ao se
tomar como valores de:
a) 22/7 b) 333/116 c) 355/113 d)
x2
x4
√
3+
x6
√
2
−
−
para x = 5/7, quais são os
13) Ao se calcular cos(x) ∼
= 1−
2!
4!
6!
erros: inicial, de truncamento, de arredondamento e total cometidos quando
se realiza os cálculos arredondados em duas casas decimais.
Bibliograa
[1] C.W. Ueberhuber: Numerical Computation: Methods, software and
analysis. Springer Berlin Heidelberg (1997) Vol. 1 474 pages
[2] J. Stoer, R. Bulirsh: Introduction to Numerical analysis. 2nd ed.
Springer-Verlag, Berlin Heidelberg New York Tokio (1993)
[3] J.F. Traub, H. Wozniakowski: On the Optimal Solution of Large Linear
Systems. J. Assoc. Comp. Mach. 31 (1984), pp. 545-559.
[4] R.W. Hamming, E.A. Feigenbaum Introduction to applied numerical
analysis. McGraw-Hill, Inc New York (1971)
[5] R.E. Moore: Interval Analysis. Prentice Hall, Englewood Clifs, NJ, USA
(1966)
[6] G. Alefeld, J. Herzberger: Introduction to Interval Computations. Academic Press, New (1966)
[7] U.W. Kulish and W.L. Miranker: The Arithmetic of the Digital Computers: A New Approach. SIAM Review 28, 1 (1986)
[8] Rademacher, H, A.: On the accumulation of errors in processes of integration on higg-speed calculating machines. Procedings of a symposium
on large-scale digital calculating machinary. Annals Comp. Labor. Havard Univ. 16 (1948) pp 176-185
[9] Sterbenz, P.H.: Floating Point Computation. Prentice Hall, Englewood
Clifs, NJ, USA (1974)
[10] Bailey, D.H.: MPFUN - A portable High Performance Multiprecision
Package. NASA Ames Tech. Report RUR-90-022, (1990)
[11] Goldeberg, D: What Every Computer Scientist Should Know About
Floating-Point Arithimethic. ACM Computing Surveys, 23 (1991) pp
5-48
[12] C.W. Ueberhuber: Numerical Computation: Methods, software and
analysis. Springer Berlin Heidelberg (1997) Vol. 2 495 pages
39
40
BIBLIOGRAFIA
[13] Fröberg, C-E.: Introduction to numerical analysis. 2nd ed. AddisonWesley Pub. Co. , Reading, Mass, , 1965
[14] Süli, E and Mayers, D. F.: An Introduction to Numerical Analysis.
Cambridge University Press, 2003
[15] Conte, S.D. and Boor, C.: Elementary Numerical Analysis: An algorithmic approach. 3rd ed. McGraw-Hill Book Company, New York, 1980
Download