• Nenhum resultado encontrado

Métodos Numéricos para Engenheiros com Scilab. Sérgio Galdino

N/A
N/A
Protected

Academic year: 2021

Share "Métodos Numéricos para Engenheiros com Scilab. Sérgio Galdino"

Copied!
40
0
0

Texto

(1)

Sérgio Galdino

26 de Setembro de 2013

(2)
(3)

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

com-parada 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 10

6

s

−1

chegando

facilmente a 10

12

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 10

6

/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

compu-taçã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

re-presentação nita de um processo produz erro de truncamento:

Exemplos:

Números:

π = 3.1415926535 . . .

(1.1)

(4)

1

3

= 0.33333 . . .

(1.2)

Processos:

b a

f (x)dx = lim

∆xi→0 n

i=1

f (x

i

)∆x

i

,

∆x

i

= (x

i+1

− xi

)

(1.3)

df (x)

dx

= lim

∆x→0

(

f (x + ∆x)

− f(x)

∆x

)

(1.4)

Grande parte da matemática é sensível aos efeitos produzidos pelo

arre-dondamento numérico; esta vulnerabilidade é que os estatísticos chamam de

"não é robusto".

Esta diferença é fundamental, pois somente partes da matemática

resis-tente aos erros de arredondamentos são úteis em matemática aplicada ao

mundo real.

Signicados diferentes surgem para as mesmas palavras. A expressão

ze-ros 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

te-orema 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.

(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

sig-nicativos 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, 2

2

= 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

qual-quer 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)

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 = amN

m

+

· · · + a

1

N

1

+ a

0

N

0

+ a

−1

N

−1

+

· · · + a−n

N

−n

= b

j

M

j

+

· · · + b

1

M

1

+ b

0

M

0

+ b

−1

M

−1

+

· · · + b

−k

M

−k

(1.5)

onde os coecientes a

m

, a

m−1

,

· · · , a

1

, a

0

, a

−1

,

· · · , an

−1

, a

−n

são

conhe-cidos e os coecientes b

j

, bj

−1

,

· · · , b

1

, b

0

, b

−1

,

· · · , bk−1

, b

−k

devem ser

determinados. Observe que b

j

, b

j−1

,

· · · , b

1

, b

0

, 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 = b

j

M

j

+

· · · + b

1

M

1

+ b

0

M

0

, e dividindo i por M nós obtemos

um quociente q

1

e um resto r

1

= b

0

. Continuando, dividiremos q

1

por M,

nós conseguiremos q

2

e o resto r

2

= b

1

, e, obviamente, b

0

, b

1

, b

2

,

· · · 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

con-secutivas 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

bi-ná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 261

10

= 1.0000.0101

2

.

(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, 359

10

= 0, 0101.1011.1

· · ·

2

.

Somando-se as partes inteiras e fracionárias dos binários obtidos têm-se

261, 359

10

= 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 261

10

= 100.200

3

.

(8)

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

mul-tiplicações escritas na ordem direta de sus obtenção. Então 0, 359

10

=

0, 100.200.201

· · ·

3

. Somando-se as partes inteiras e fracionárias dos

biná-rios obtidos têm-se

261, 359

10

= 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 261

10

= 105

16

.

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

...

... ...

...

(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

mul-tiplicações escritas na ordem direta de sus obtenção. Então

0, 359

10

= 0, 5 11 14 7 6 12 8 11 4

· · ·

16

ou utilizando-se os símbolos hexadecimais (Tabela 1.1)

0, 359

10

= 0, 5

BE.76C.8B4 · · ·

16

Somando-se as partes inteiras e fracionárias dos binários obtidos têm-se

261, 359

10

= 105, 5

BE.76C.8B4 · · ·

16

Conv10.sce

Este roteiro Scilab realiza a conversão de inteiros na base 10 para base

qualquer.

1. // Conversão de inteiros da base 10 para uma base qualquer 2. function y=conv10(x,b) 3. y='' 4. while x > 0 5. cx=modulo(x,b) 6. x=int(x/b) 7. y=string(cx)+'.'+y

(10)

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. // Conversão de fracionários da base 10 para uma base qualquer 2. function y=convF10(x,b,n) 3. y='0,' 4. i=0 5. while i < n 6. p=x*b 7. cx=int(p) 8. y=y+string(cx)+'.' 9. x=p-cx 10. i=i+1 11. end 12. 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 =

(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. // Conversão da base 10 para uma base qualquer: Inteiro + Fração 2. function y=conv10X(xx,b,n) 3. x=int(xx) 4. yi='' 5. while x > 0 6. cx=modulo(x,b) 7. x=int(x/b) 8. yi=string(cx)+'.'+yi 9. end 10. y=yi 11. x=xx-int(xx) 12. yf=',' 13. i=0 14. while i < n 15. p=x*b 16. cx=int(p) 17. yf=yf+string(cx)+'.' 18. x=p-cx 19. i=i+1 20. end 21. y=y+yf 22. 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)

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, 359

10

= 1.0000.0101, 0101.1011.1

2

Parte inteira

1

· 2

8

+ 0

· 2

7

+ 0

· 2

6

+ 0

· 2

5

+ 0

· 2

4

+ 0

· 2

3

+ 1

· 2

2

+ 0

· 2

1

+ 0

· 2

0

= 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, 359

10

= 100.200, 100.200.201

3

Parte inteira

1

· 3

5

+ 0

· 3

4

+ 0

· 3

3

+ 2

· 3

2

+ 0

· 3

1

+ 0

· 3

0

= 261

(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, 359

10

= 105, 5 11 14 7 6 12 8 11 4

16

ou seja,

261, 359

10

= 105, 5BE.76C.8B4

16

Parte inteira

1

· 16

2

+ 0

· 16

1

+ 5

· 16

0

= 261

Parte fracionária

5

16

1

+

11

16

2

+

14

16

3

+

7

16

4

+

6

16

5

+

12

16

6

+

8

16

7

+

11

16

8

+

4

16

9

= 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

n

k−1

· · · n

1

n

0

)

=

±(nk

β

k

+ n

k−1

β

k−1

+

· · · + n

1

β

1

+ n

0

β

0

),

(1.6)

onde os n

i

, i = 0, 1,

· · · , k são inteiros satisfazendo 0 ≤ ni

< β

e n

k

̸= 0.

Por exemplo, na base β = 10, o número 1957 é representado por:

1957 = 1

× 10

3

+ 9

× 10

2

+ 5

× 10

1

+ 7

× 10

0

(14)

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

i=k

xiβ

i

(1.7)

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

i=3

xiβ

i

= 1

× 10

3

+ 9

× 10

2

+ 5

× 10

1

+ 7

× 10

0

+ 3

× 10

−1

+ 2

× 10

−2

+ 5

× 10

−3

e é armazenado como x

3

x

2

x

1

x

0

.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

i=l

m−iβ−i

(onde 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

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 normali-zado.

Observação 2 o número zero pertence a qualquer sistema e é representado com mantissa igual a zero e k = −m.

(15)

Exemplo 7 Escrever o número N = −19.2 · 10−8 em ponto utuante na forma

normalizada.

Reescrevendo o número para a forma N = −0.192 · 10−6 , o número ca na

re-presentaçã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= 0.53 = 0.53× 100, x2=−8.472 = −0.8472 × 101, x3= 0.0913 = 0.913× 10−1, x4= 35391.3 = 0.353913× 105, x5= 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 e M, usa-se a notação: FN(β, t, m, M ).

Um número em FN(β, t, m, M )será representado por:

±0.m−1m−2m−3· · · m−t× β−k (1.9)

onde m−1̸= 0 e −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−1m−2m−3· · · m−t×β−k, onde

−2 ≤ k ≤ 2. Então: x1= 0.53 = 0.53× 100, x2=−8.472 = −0.8472 × 101, x3= 0.0913 = 0.913× 10−1, x4= 35391.3 = 0.353913× 105, x5= 0.0004 = 0.4× 10−3.

Observe que os números x4= 35391.3e x5= 0.0004não podem ser

representa-dos no sistema. De fato, o número 35391.3 = 0.353913 × 105tem 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 Diferença entre dois números na aritmética em ponto utuante nor-malizada.

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)

1.4.6 Armazenamento na memória

Para começar vamos representar o número 0.00053474839 num computador deci-mal. A notação ponto-utuante normalizada deste número é 0.53474839 · 10−3.

Par evitar expoente negativo, nós adicionamos, arbitrariamente, 50 (deslocamento) ao expoente e o número agora é 0.53474839 · 1047. 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 seguinte: −50 ≤ k ≤ 49. 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 arma-zenada tendo um bit de "sinal"e 31 bits regulares pode representar um número binário ponto-utuante na forma seguinte:

0 1 8 9 31

sinal característica 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 es-quema de representação acima.

12 2 0 6 2 0 3 2 1 1 Multiplicação Sobra 0.625x2 = 1.25 1 0.25 x2 = 0.50 0 0.5 x2 = 1.0 1 12.62510= 1100.1012= 0.1100101× 24 Ajustando a característica: 4 + 128 = 132

(17)

132 2 0 66 2 0 33 2 1 16 2 0 8 2 0 4 2 0 2 2 0 1 13210= 100001002 0 1 8 9 31 0 1 0 0 0 0 1 0 0 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 discuti-dos 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: Mantém-se a de maior módulo e ajusta-se a de menor valor.

(18)

31411122 55 31411122 55 +12344321 53 −→ +00123443 55 31534565 55

4- Resultado com zero, ou zeros, à esquerda: Normaliza-se o resultado. 34122222 73

−34000122 73

00122100 73 resulta em: 12210000 71

Na multiplicação e divisão as mantissas e características são tratadas separa-damente.

31313142 51

×12315782 65

mantissa = 0.31313142 × 0.12315782 = 0, 038564583

característica = 51 + 65 − 50 = 66, onde −50 é o desconto para compensar o ajuste +50 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.

(19)

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. Uma instância é identicada por valores de parâmetros do modelo. Por exemplo, o comprimento l, o deslocamento angular inicial θ e a constante gravitacional g (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 com-putacional 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 é deno-tado por erro de algoritmo.

Exemplo:

A solução do sistema de equações

Ax = b, A∈ Rnxn, b, x∈ Rn

requer um esforço computacional proporcional a n3. Se uma solução aproximada ex

satisfazendo

||Aex − 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)

Exemplo 11 A troca da série innita da exponencial: ex= k=0 xk k! com Pn(x) = nk=0 xk 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

I =

b a

f (x)dx

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 corres-pondentes avaliações aproximadas das funções {f(x1),· · · f(xn)}. Os erros de

ar-redondamento 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 aproxi-maçã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 f(x) para um dado x real. No cálculo prático x é aproximado por ex pois o computador tem uma palavra nita. A diferença entre ex − x é o erro inicial, enquanto ϵ1= f (ex)−f(x) é o erro propagado correspondente. Normalmente

fé trocado por uma função mais simples f1(freqüentemente uma expansão em série

de potência truncada). A diferença ϵ2= f1(ex) − f(ex) é o erro de truncamento. Os

cálculos são feitos por um computador, portanto não são operações exatas. Na realidade calculamos f2(ex) no lugar de f1(ex), o qual é um valor calculado errado

(21)

de uma função errada com argumento errado. A diferença ϵ3 = f2(ex) − f1(ex) é o

erro de arredondamento propagado. O erro total é

ϵ = f2(ex) − 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 + x 1!+ x2 2! + x3 3! + x4 4! para ex = 0.3333 ϵ2= f1(ex) − f(ex) = − ( 0.33335 5! + 0.33336 6! +· · · ) =−0.0000362750 f2(ex) = 1 + 0.3333 + 0.0555 + 0.0062 + 0.0005 = 1.3955

f1(ex) = 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 ex uma aproximação, então temos:

Erro absoluto : ϵ =|x − ex| (1.10)

e

Erro relativo : ϵ x

= x −xex , (1.11) Um número decimal é arredondado na posição n desprezando-se todos os dígi-tos à direita desta posição. O dígito na posição n é 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 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 n decimais onde todos os dígitos além da posição n são simplesmente desprezados.

(22)

Exemplo 14 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. Na-turalmente 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 signi-cativos 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 signi-cativos ou não. Por exemplo, 8630574 escrito com 4 dígitos signisigni-cativos é 8630000. Em muitos casos nós estimamos o erro de uma função f(x1, x2, . . . , xn) com

erros individuais nas variáveis (x1, x2, ..., xn)conhecidos. Nós encontramos

direta-mente que ∆f = ∂f ∂x1 ∆x1+ ∂f ∂x2 ∆x2+· · · + ∂f ∂xn ∆xn (1.12)

onde os termos de ordem superior foram desprezados. O erro máximo é dado por

|∆f| = ∂f ∂x1 |∆x1| + ∂f ∂x2 |∆x2| + · · · + ∂f ∂xn |∆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 2× 10

−4× 20000 = 1

O experimento com simulação Monte Carlo abaixo demonstra que a previsão acima é pessimista para o cenário examinado.

Exemplo 15 Cálculo de z =x

y.

Se ex = x + δ e ey = y + γ são duas aproximações para os números exatos x e y. Calcula-se z = ( x y ) arredondado = ex ey = x + δ y + γ+ ϵ então ˜ z ∼= z + 1 y · δ − x y2 · γ + ϵ

(23)

Caso A: x = 8 δ = 0.009 y = 5 δ = 0.04 ex = x + δ ey = y + γ x y = 1.6 ex ey = 1.589 z + 1 y · δ − x y2 · γ + ϵ = 1.589 Caso B: x = 8 δ =−0.07 y = 5 δ = 0.08 ex = x + δ ey = y + γ x y = 1.6 ex ey = 1.561 z + 1 y · δ − x y2 · γ + ϵ = 1.56

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 ponto-utuante 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)

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 deci-mais 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 A equação do segundo grau x2− b · x + ϵ = 0 tem duas soluções:

x1=

b +√b2− 4ϵ

2 e x2=

b−√b2− 4ϵ

2

Se b < 0 e ϵ << b , x2 é expresso como a diferença de dois números

pratica-mente iguais e poderá perder muitos dígitos signicativos. Se x2 for reescrito como:

x2= ϵ x1 = b +√b2− 4ϵ a raiz é aproximadamente ϵ

b sem perda de dígitos signicativos.

Usando-se uma máquina com quatro dígitos decimais na mantissa da repre-sentação: b = 300.0 e ϵ = 1.000 90000− 4.000 = 300.0 x1= 600.0 2.000 = 300.0 x2= 300.0− 300.0 2.000 = 0.0000 2.000 = 0.0000 usando a relação x2= ϵ x1 = 1.000

300.0 = 0.0033é um resultado mais preciso.

Exemplo 20 Sabe-se que para x grande senh(x) ∼= cosh(x) ∼= e

x

2 . Se quisermos calcular e−x podemos dizer que e−x = cosh(x)− senh(x), o que conduz a um

cancelamento perigoso. Por outro lado e−x= 1

cosh(x) + senh(x) fornece resultados

(25)

1.6.2 Aritmética intervalar

O cálculo de erro de arredondamento estimado por aproximação de primeira or-dem, 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. A aritmética intervalar faz cálculos sistemáticos através de intervalos [x] = [x, x] limitados de números de máquinas x, x ∈ F, em vez de números reais simples x. As operações aritméticas +, −, ×, ÷ são denidas através de intervalos. Algoritmos intervalares são implementados em computadores produzindo resultados intervala-res 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+ 3xpara [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 ´otimo)

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 são variáveis independentes. Por µϵ e σϵ2denota-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 [−eps, /eps], obtém-se

µϵ:= E(ϵ) = 0, σ2ϵ = E(ϵ2) = 1 2 epseps −eps t2dt = 1 3eps 2=: ϵ−2 (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)

de arredondamento é somente uma aproximação do padrão observado em cálcu-los computacionais, assim os as estimativas de µϵ e σϵ2 devem ser determinadas

empiricamente. Os resultados x dos algoritmos estando sujeitos a erros de arredon-damento aleatórios tornam-se variaríeis aleatórias com valor esperado µxe variância

σ2

x satisfazendo a mesma relação básica

σ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 x, y e constantes α, β ∈ R:

µαx±βy= E(αx± βy) = αE(x) ± βE(y) = αµx± βµy

σ2

αx±βy= E((αx± βy)

2)− (E(αx ± βy))2

= α2E(x− E(x))2+ β2E(y− E(y))2= α2σ2

x+ β2σ2y

(1.15) A primeira fórmula acima resulta da linearidade do valor esperado. Ela é valida para variáveis aleatórias x, y. A segunda fórmula segue da relação E(xy) = E(x) ·

E(y), que é satisfeita se x e y são independentes. Assim µx×y= E(x× y) = E(x)E(y) = µxµy

σx2×y = E(x× y − E(x)E(y))2= µx2µy2− µ2xµ2y

= σ2

xσy2+ µ22y+ µ22x

(1.16) Alem disso os valores esperados µx são trocados por valores estimados x e

variâncias relativas ϵ2

x= σ2x/µ2x≈ σ2x/x2 são considerados, então de (1.15) e (1.16):

z = x + y ou z = x− y : ϵ2 z = (˙ xz) 2ϵ2 x+ ( y z) 2ϵ2 y+ ¯ϵ2 z = x× y ou z = x ÷ y : ϵ2z = ϵ˙ 2x+ ϵ2y+ ¯ϵ2

Os limites de erros para o resultado nal r de uma computação numérica são obtidos da variância relativa ϵ2

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 (In-ternational 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

(27)

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, Ma-cintoshes 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 repre-sentaçã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 uni-dades. 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 repre-senta reais em notação cientíca. A notação cientíca reprerepre-senta os números como um número de base e um expoente. Por exemplo, 123.123 pode ser representado como 1.23123 × 102. Em hexadecimal, o 123.FAC número pode ser representado

como 1.23FAC × 162.

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 pre-cisão adequada à escala do número. Isso permite que ele represente números de 0, 0000000000000001e 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 ex-poente 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. O número de bits para cada campo são mostradas (intervalo dos bits estão entre colchetes):

(28)

Precisão Sinal Expoente Fração Deslocamento Simples 1 [0] 8 [1-8] 23 [9-31] 127 Dupla 1 [0] 11 [1-11] 52 [12-63] 1023 Gracamente:

0 1 8 9 31

sinal característica mantissa e

0 1 11 12 63

sinal 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. Por exemplo, o número 4957 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 norma-lizada 4957 é representado como 4.957 × 103.

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)

e não precisa-se representá-lo explicitamente. Como resultado, a mantissa tem efetivamente 24 bits de resolução com fração de 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 127 mais o verdadeiro expoente de precisão simples ou 1023 mais verdadeiro para o expoente de precisão dupla.

4. O primeiro bit da mantissa é geralmente assumida como 1.f, onde f é o campo fração de bits.

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únú-meros des-normalizados (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˜ao)× 2deslocamento.

• Números negativos normalizados são denidos dentro da faixa de: −2(1−deslocamento)até −(2 − 2−precis˜ao)× 2deslocamento.

• Números positivos normalizados superiores (2 − 2−precis˜ao)× 2deslocamento e

números negativos normalizados inferiores −(2 − 2−precis˜ao)× 2deslocamento

são transbordados (overows).

• Números positivos normalizados menores que 2(1−deslocamento) e

números negativos normalizados maiores que −21−deslocamento são

insuci-entes (underows).

Precisão Desnormalizados Normalizados

Simples (1±2− 2−149−23≈ ±10)× 2126−44.85≈ 10at´37.93e ±2−126≈ ±10−37.93 at´e (2− 2−23)× 2127≈ 1038.53 Dupla (1±2− 2−1074−52)≈ ±10× 21022−323.31≈ 10307.65at´e ±2 −1022≈ ±10−307.65 at´e (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 −(2 − 2−23)× 2127. (overow negativo)

• Números negativos maiores do que −2−149. (underow negativo)

• Zero.

(30)

• 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, da mesma forma que os inteiros podem transbordar. Underow é um problema 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úme-ros IEEE de ponto utuante:

Precisão Binário Decimal

Simples ±(2 − 2−23)× 2127 ≈ ±1038.53

Dupla ±(2 − 2−52)× 21023 ≈ ±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, 21023para o dupla), e, a mantissa está completa de 1's (incluindo

1bit 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 antes do ponto binário. Portanto representa um número (−1)s× 0.m × 2−126, onde s é o bit de sinal e m é a mantissa. Para precisão dupla,

desnormalizada números são da forma (−1)s× 0.m × 2−1022. A partir disto se pode

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 porque permite as operações para tratar de situações de estouro (overow). As operações com valores innitos são bem denidas no IEEE de ponto utuante.

(31)

Não é um número

O valor NaN (Not a Number) é usado para representar um valor que não representa um número real. NaN são representados por um padrão de bits com um expoente de 1's e uma mantissa diferente de zero. Existem duas categorias de NaN: QNaN (Quiet 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 va-lores 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

=

números denormalizados (sub-normal)

true caso o sistema contenha

=

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

(32)

Exemplo 23 (IBM System/390) Fornece três sistemas de numeração hexadecimal F(16, 6, −64, 63, false) para short precision, F(16, 14, −64, 63, false) para long pre-cision e F(16, 28, −64, 63, false) para extended precison.

Exemplo 24 (Cray) Fornece dois sistemas de numeração F(2, 48, −16384 , 8191, false) e F(2, 96, −16384, 8191, false).

Exemplo 25 (Calculadoras) Calculadoras cienticas são normalmente fornecidas com um único sistema de numeração F(10, 10, −98, 100, false). 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 dis-cretos 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.m1m2m3× β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.100(2)×     2−1 20 21 22     =     0.25(10) 0.5(10) 1.0(10) 2.0(10)     desde que 0.100(2)= 0.5(10); 0.101(2)×     2−1 20 21 22     =     0.3125(10) 0.625(10) 1.25(10) 2.5(10)     desde que 0.101(2)= 0.625(10); 0.110(2)×     2−1 20 21 22     =     0.375(10) 0.75(10) 1.5(10) 3.0(10)     desde que 0.110(2)= 0.75(10);

(33)

0.111(2)×     2−1 20 21 22     =     0.4375(10) 0.875(10) 1.75(10) 3.5(10)     desde que 0.111(2) = 0.875(10);

Exemplo 27 Considerando o mesmo sistema do exemplo 26, represente os núme-ros: x1= 0.48, x2= 4.8e x3= 0.18dados na base 10.

Solução: Fazendo os cálculos obtemos que: 0.4810 = 0.111× 2−1, 4.810 =

0.100×23 e 0.13

10= 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).

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 neces-sá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.

Para resolver um sistema de equações na linear, a função f : Rn→ Rn 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.

(34)

Figura 1.1: Planilha do software matemático Mathcad usada para traçar o

gráco da função f(x) = 3x

2

+

1

π4

ln(π

− x)

2

+ 1

. A função não tem zeros

quando calculada numericamente com F(2, 53, −1021, 1024, true)

(analitica-mente tem dois)

A função

f (x) = 3x2+ 1

π4ln(π− x)

2+ 1 (1.17)

Tem duas raízes no intervalo [3.14, 3.15]; ϵ1∈ [3.14, π] e ϵ2∈ [π, 3.15]. Estes

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 ˜P7 : F → F usando o

(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 ˜P7 < 0, embora ˜P7 > 0 nesta

região e, similarmente, para x < 1 existem milhares de pontos com valores ˜P7> 0,

embora ˜P7< 0nesta 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)

A =           8 3 0 7 8 3 7 8 3 . . . . . . 7 8 3 0 7 8           eb =           11 18 18 . . 18 15          

A gura 1.2 mostra uma planilha Mathcad para resolução do sistema linear A · x = b. Embora o residual seja praticamente zero para todos as componentes do vetor solução, temos um resultado numericamente insatisfatório:

x =           1 1 1 · · 1 1           = solução EXATA !

Obs. A função verifylss do Matlab Intlab toolbox produziu os resultados de acordo.

Exemplo 31 (avaliação de função)

Abaixo vamos avaliar a função f(x, y) = 333.75 ∗ y6+ x2∗ (11 ∗ x2∗ y2− y6

121∗ y4− 2) + 5.5 ∗ y8+ 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)

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

(37)

1.10 Exercícios Propostos

1) Converta os seguintes números decimais para sua forma binária: a) 35 b) 2345 c) 0.1218 d) 67.67 e) 95 f) 2500 g) 2000 h) 655 i) 722 j) 3.6 × 1021 l) 231 m) 2.5 × 10−18

2) Converta os números binários para suas formas octal, hexadecimal e decimal: a) 1011012 b) −1101010112 c) −0.11012

d) 0.1111111012 e) 0.00001012 f) 101012

g) −111010110112 h) −0.11000012 i) 0.1011001111012

j) 0.0011001012

3) Reescreva os números seguintes na representação do ponto-utuante norma-lizada:

a) 27.534 b) −89.901 c) 18 × 1021 d) 1.3756 × 10−7

e) 11.01112 f) −111.01012 g) 0.001012 h) 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

Referências

Documentos relacionados

Our results demonstrate that mixed rumen ciliates respond to excess carbohydrate by synthesizing reserve carbohydrate and spilling minimal energy, whereas bacteria

Resumindo, integração de evidências que abrangem várias modalidades tecnológicas permite que os estudos de hipnose abram caminhos para a compreensão científica desse fenômeno, que

A aplicação de parafina em raízes de mandioca tem sido eficiente para prolongar o seu período de conservação.. Este efeito é atribuído à diminuição da permeabilidade ao

O objetivo do curso foi oportunizar aos participantes, um contato direto com as plantas nativas do Cerrado para identificação de espécies com potencial

Tal informação só é, em qualquer caso, revelada às pessoas ou autoridades (incluindo tribunais e órgãos administrativos ou de supervisão) que tratam da

3º - Compete às CONCESSIONÁRIAS ou PERMISSIONÁRIAS de prestação de serviços públicos de abastecimento de água e esgotamento sanitário operar, manter e executar reparos

Nesta técnica, descrita na Seção 5, funções de base que resolvem o problema localmente são utiliza- das para gerar um espaço de elementos finitos, e automaticamente levam

Faculdade de Ciência e Tecnologia Departamento de Matemática Departamento de Engenharia Civil e Ambiental Departamento de Engenharia Electromecânica Departamento de Computadores