• Nenhum resultado encontrado

4 Operações aritméticas em sistema de vírgula flutuante

N/A
N/A
Protected

Academic year: 2021

Share "4 Operações aritméticas em sistema de vírgula flutuante"

Copied!
30
0
0

Texto

(1)

4

Operações aritméticas em sistema de vírgula

flutuante

4.1 Introdução

É imediato reconhecer que, dados dois números x1,x2∈F, o resultado

de qualquer das operações aritméticas +, -, ×, ÷ com esses números pode não ser um número pertencente a F . Vejamos os seguintes exemplos. Em

(

10,4,2

)

F , sejam x1=3.125×102 e 3 2 2.137 10 − × = x . Então, como 2 2 =0.00002137×10

x , vem que x1+ x2 =3.12502137×102 não pertence a

(

10,4,2

)

F . No sistema binário, 1 e 10 são ambos números do sistema de ponto flutuante, enquanto que

10

1 não pertence, independentemente do número p de dígitos na mantissa. No formato simples da aritmética IEEE754, os números 1 e 24

2− pertencem ao sistema, mas a soma 24

2

1+ − não pertence.

Assim sendo, as operações aritméticas não são efectuadas exactamente num computador, sendo “substituídas” pelas chamadas operações aritméticas de vírgula flutuante. É pois importante e necessário estudar o comportamento destas operações, nomeadamente no que diz respeito aos erros. Um facto, que estes exemplos mostram desde já, é que as operações aritméticas de vírgula flutuante não satisfazem todas as propriedades das operações aritméticas usuais (em geral, as propriedades

(2)

comutativa, distributiva, associativa e elemento neutro). De facto, no primeiro exemplo referido anteriormente, tem-se que x1+x2 = x1 e no entanto, x2 ≠0.

Quando o resultado de um operação em ponto flutuante não é um número pertencente a F, no formato escolhido, a norma IEEE754 requer que o resultado produzido seja o valor correctamente arredondado do resultado exacto, ou seja, arredondado de modo a pertencer ao formato utilizado, através do modo de arredondamento definido.

Sejam x e 1 x números do sistema de ponto flutuante, +, -, ×, ÷ as 2

quatro operações aritméticas usuais e denotemos por ∆, û, ⊗ e Θ as correspondentes operações em ponto flutuante.

De acordo com (3.7), para a soma e a subtracção temos que:

( )

(

)

( )

(

)

     ≤ × ± > × ± = × ± × = ± − − − − (4.2) (4.1) 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 . . e e se b m b m e e se b b m m b m b m x x e e e e e e m e

enquanto que para a multiplicação e a divisão utilizamos:

(

)

1 2 2 1 2 1 e e b m m x x × = × × + e 1 2 2 1 2 1 e e b m m x x ×       = .

Estas quatro operações desenvolvem-se em computador de acordo com os seguintes trâmites ([50]):

1. Decomposição dos operandos, isto é, separação destes números nas respectivas mantissas e expoentes;

2. Alinhamento das mantissas e dos expoentes para a soma e a subtracção;

3. Operação com as mantissas e/ou com os expoentes;

4. Normalização da mantissa, isto é, translação à esquerda da mantissa com decremento do expoente em uma unidade por cada zero à esquerda da mantissa;

(3)

6. Recomposição do resultado, isto é, reunião da mantissa e do expoente para formar o resultado no sistema de ponto flutuante.

Ou seja, se x e 1 x são números do sistema de ponto flutuante então 2

(

1 2

)

2 1 x round x x x ⊕ = + ,

(

1 2

)

2 1 x round x x xΟ = − ,

(

1 2

)

2 1 x round x x x ⊗ = × , e x1Θx2 =round

(

x1÷x2

)

,

onde a operação round é o modo de arredondamento definido.

As operações efectuadas com os expoentes, uma vez que estes são inteiros, não introduzem erros (exceptuando obviamente nos casos de overflow e underflow). Por outro lado, as operações com as mantissas são susceptíveis de erros.

Utilizando o teorema 3.1, tem-se, desde que x1+x2 pertença ao

intervalo normalizado, que

(

+

)(

)

=

2 1 2 1

1 x x x

x ,

onde δ <ε. Este resultado aplica-se a todos os modos de arredondamento. É claro que no caso do arredondamento simétrico, temos um resultado mais forte: ε ≤ δ 2 1 .

Por exemplo, no formato simples da aritmética IEEE, se o modo de arredondamento utilizado é o simétrico, a adição em ponto flutuante está correcta até um factor de 24

2

1+ − , isto é, até aproximadamente sete dígitos decimais. Este resultado é igualmente válido para as outras operações.

O resultado de uma sequência de duas ou mais operações aritméticas pode não ser o valor arredondado correctamente do resultado exacto. Por exemplo, consideremos a computação de

(

x+ y

)

−z, no formato simples, onde

1 =

x , y=2−25

e z=1 e o modo de arredondamento definido é o simétrico. Os números x , y e z são todos números do formato simples da norma IEEE,

(4)

uma vez que x= z =1.0×20 e y=1.0×2−25. A soma exacta dos primeiros dois números é 00001 0000000000 0000000000 . 1 = + y x .

Este número não pertence ao formato simples, e portanto é arredondado, tendo-se

1 = ⊕ y

x .

O resultado final é então

(

x⊕y

)

Θz=1Θ1=0. No entanto, o resultado correcto é

(

)

25 2− = − + y z x ,

que pertence ao formato simples. É claro, que este resultado era obtido exactamente se o sistema de ponto flutuante utilizado tivesse sido o duplo ou fazendo

(

x−z

)

+y. 

4.2 Soma e Subtracção

Consideremos x e 1 x dois números reais positivos e 2 y o resultado

(exacto) da sua soma, isto é, y=x1+x2. Designando por ~y =round

(

x1+x2

)

o resultado desta operação em F

(

b,p,q

)

e aplicando o teorema 3.1 temos que:

( )

x1 = x1

(

1+δ1

)

round

( )

x2 = x2

(

1+δ2

)

round

Denotando por δ o erro relativo de arredondamento do resultado da soma, 3

vem que:

(

1 2

) (

[

1 1

)

1

(

1 2

)

2

]

(

1 3

)

~=round x +x = +δ x + +δ x × +δ

y , com δ123 <ε≤µ.

Ou seja, ~y=

(

1+δ3

)(

1+δ1

)

x1+

(

1+δ3

)(

1+δ2

)

x2. Desta expressão conclui-se que o resultado da soma de dois números em ponto flutuante é idêntico ao que se

(5)

obteria com aritmética exacta mas com operandos perturbados, isto é,

(

1+δ3

)(

1+δ1

)

x1 em vez de x , e 1

(

1+δ3

)(

1+δ2

)

x2 no lugar de x . No entanto, 2

estas perturbações são muito pequenas, uma vez que δ123 ≤µ<<1.

No estudo de erros das operações aritméticas, os produtos de factores da forma

(

1+δi

)

surgem frequentemente. Assim sendo, torna-se necessário efectuar uma estimativa do seu valor. Consideremos para isso o seguinte resultado ([50] pp. 14-15):

Teorema 4.114 - Sejam δ números tais que i δi ≤µ com i=1,...,n e µ um

número positivo tal que nµ≤0.01. Então existe um número real θ verificando 1 ≤ θ e tal que

(

)

= + θ µ

= n n i i 1 1.01 1 1 . É

A constante 1.01 que surge neste teorema resulta de se considerarem hipóteses realistas sobre o valor de µ e do número de termos. Tendo em conta este resultado, os erros absoluto A e relativo R da soma são obtidos da seguinte forma:

( )(

2 1 1 2 2

)

01 . 1 ~ y x x y A= − = µ θ +θ       + θ + + θ µ = − = 2 1 2 2 2 1 1 1 02 . 2 ~ x x x x x x y y y R .

Então, temos que

(

)

≤ µ      + + + θ θ µ ≤2.02 max , 2.02 2 1 2 2 1 1 2 1 x x x x x x R .

Existe um outro modo de apresentar estes resultados:

~y =round

(

x1+x2

) (

= x1+x2

)(

1+R

)

, com R ≤2.02µ.  (4.3)

14

(6)

Vejamos então como adicionar dois números do formato simples na

aritmética IEEE754. Consideremos os números 21

1 1 e m x = × e 2 2 2 2 e m x = × . Se

os expoentes e e 1 e são iguais, é apenas necessário adicionar as mantissas 2

1

m e m . O resultado final é dado por 2

(

)

21

2 1

e

m

m + × , o qual necessita ser normalizado se m1+ m2 ≥2 ou se m1+ m2 <1. Por exemplo, o resultado de

adicionar

(

)

1 2 2 100 . 1 3= × a

(

)

1 2 2 000 . 1 2= × é

(

)

1 2 2 000 0000000000 1000000000 . 1 × +

(

)

1 2 2 000 0000000000 0000000000 . 1 × =

(

)

1 2 2 000 0000000000 1000000000 . 10 × Normalizando, obtém-se

(

)

2 2 2 000 0000000000 0100000000 . 1 × .

No entanto, se os dois expoentes e e 1 e são diferentes, digamos por exemplo 2

2 1 e

e > , o primeiro passo na adição dos dois números consiste em alinhar as mantissas desnormalizando o número de menor expoente de acordo com

(4.1). Por exemplo, adicionando

(

)

1

2 2 100 . 1 3= × a

(

)

1 2 2 100 . 1 4 3 = × − , obtemos

(

)

1 2 2 000 0000000000 1000000000 . 1 × +

(

)

1 2 2 000 0000000000 0110000000 . 0 × =

(

)

1 2 2 000 0000000000 1110000000 . 1 × .

Consideremos agora a adição de 3 com 23

2 3× − . Temos que

(

)

1 2 2 000 0000000000 1000000000 . 1 × +

(

)

1 2 2 1 | 0001 0000000000 0000000000 . 0 × =

(

)

1 2 2 1 | 0001 0000000000 1000000000 . 1 × (4.4)

Arredondamento por defeito:

(

)

1

2 2 0001 0000000000 1000000000 . 1 ×

Arredondamento por excesso:

(

)

1

2 2 0010 0000000000 1000000000 . 1 × .

(7)

O 24º bit é mostrado após a barra vertical. Por isso, o resultado tem de ser arredondado correctamente. No caso do arredondamento simétrico, existe um empate, e portanto o resultado é aquele cujo bit final é zero - neste caso arredondamento por excesso ([49] pp. 34-36).

O arredondamento não deve ter lugar antes do resultado estar normalizado. Consideremos, por exemplo, a subtracção 3−(1+2−22+2−23) ou,

equivalentemente, adicionar 3 a −(1+2−22 +2−23). Temos que

(

)

1 2 2 000 0000000000 1000000000 . 1 × -

(

)

1 2 2 1 | 001 0000000000 1000000000 . 0 × =

(

)

1 2 2 1 | 110 1111111111 1111111111 . 0 × (4.5) Normalizando:

(

)

0 2 2 101 1111111111 1111111111 . 1 × .

Deste modo, o arredondamento não é necessário neste exemplo.

Em ambos os exemplos (4.4) e (4.5), foi necessário para executar a operação um bit extra, designado por bit de guarda, apresentado após a barra vertical seguido do bit da posição 23ª. Sem este bit, o arredondamento correcto não seria obtido. Deve referir-se, que um bit de guarda poderá não ser suficiente para obter um resultado correctamente arredondado. Em geral, são necessários três bits de guarda para implementar correctamente as operações aritméticas adição e subtracção em ponto flutuante ([49] pp. 35-36).

As máquinas utilizadas neste trabalho não possuem estes bits de guarda, pelo que os resultados obtidos de muitas operações, não são os valores correctamente arredondados.

O processo utilizado para a subtracção é semelhante ao da soma. Assim sendo, suponhamos que x1>0 e x2 <0. Então, y= x1+x2 pode ser

uma quantidade muito pequena, o que tendo em consideração a expressão do erro relativo referida em (4.3), levará a que o erro relativo R seja muito grande, não obstante o erro absoluto A se manter muito pequeno. Esta situação implica que a subtracção poderá conduzir a erros relativos grandes quando os

(8)

números a subtrair sejam muito próximos. Este facto é conhecido por cancelamento subtractivo e constitui uma causa importante de erros nos cálculos em ponto flutuante. Vejamos os seguintes exemplos:

Exemplo 1 ([50] pp. 15-16) Consideremos em F

(

10,4,2,A

)

, 2 1 4.3787 10 − × = x e 2 2 4.3783 10 − × = x e

calcule-se y= x1−x2. O resultado exacto é

6 2 1 4 10 − × = − =x x y . Em

(

A

)

F 10,4,2, , tem-se que

( )

2 1 4.379 10 − × = x fl e

( )

2 2 4.378 10 − × = x fl . Então

(

)

5 2 1 1.000 10 ~y = fl x x = × − e, por conseguinte, A=6×10−6 e 5 . 1 10 4 10 6 6 6 = × × = δ =

R . Este exemplo confirma que, apesar do erro absoluto ser

muito pequeno, o erro relativo poderá assumir valores elevados, em virtude do cancelamento subtractivo.‡

Exemplo 2 ([30] p. 5)

Admita que um certo médico decide que só operará um doente se o resultado de uma análise ao sangue der um valor negativo. O resultado da análise é obtido efectuando a diferença entre dois determinados parâmetros representados, respectivamente, por x e 1 x . Sabe-se que esses valores 2

deverão situar-se no intervalo

[ [

0,1 . O Laboratório de Análises utiliza uma máquina que converte os números, arredondando-os para 3 dígitos decimais. Os valores (exactos) da análise efectuada ao sangue do doente foram os seguintes: x1 =0.9800, x2 =0.9804. No documento, que serviu de base à

decisão errada do médico, o resultado da análise ao sangue era não negativo

(

r=0.000

)

. Analisemos o sucedido. Designando por x e 1 x , respectivamente, 2

os valores de x e 1 x representados na máquina. Tem-se: 2 x1 =0.980 e

980 . 0

2 =

(9)

subtracção é r=x1−x2 =−0.0004, pelo que o doente deveria ser operado. De

notar que o erro relativo de r é dado por 1 0004 . 0 0004 . 0 = = − = r r r R , ou seja, 100%.‡ Exemplo 3

Pretende-se calcular o valor da função f

( )

x =1−cosx para valores de x muito

pequenos, 3

10− ≤

x , por exemplo. É claro que o cálculo da função pela expressão dada conduz a uma perda apreciável de dígitos significativos, uma vez que para valores de x≈0, tem-se que cosx≈1 e portanto, o cálculo de

( )

x

f provoca cancelamento subtractivo. Um algoritmo alternativo que evite esta dificuldade é por exemplo:

(

)(

)

g

( )

x x x x x x x x x x f = + = + − = + + − = − = cos 1 sin cos 1 cos 1 cos 1 cos 1 cos 1 cos 1 ) ( 2 2 .

Consideremos, por exemplo, x=10−9. Tem-se, utilizando a máquina Texas TI-83, que:

Por outro lado, utilizando a expressão de g(x) obtemos:

(10)

Exemplo 4 ([53])

Determinar as raízes da equação x226x+1=0

, usando apenas cinco algarismos significativos.

Aplicando a fórmula resolvente tem-se que x=13± 168 e com cinco algarismos significativos tem-se que x=13±12.961. Assim sendo, as raízes desta equação são aproximadamente x1 =25.961 e x2 =0.039. Observemos que a segunda raiz foi obtida com apenas dois algarismos significativos embora a raiz quadrada tenha sido obtida com cinco algarismos significativos. Este facto ocorre uma vez que x1 >>x2. Como ultrapassar esta situação?

Sabemos que sendo x e 1 x as duas raízes de uma equação do segundo 2

grau, tem-se que:

2 4 0 0 2 2 2 S S P x P Sx x c bx ax + + = ⇔ − + = ⇔ = ± − ,

onde S = x1+x2 e P=x1.x2. Nos casos em que, por exemplo x1 >> x2 , o

cálculo de S2 −4P provoca cancelamento subtractivo e produz elevado erro no cálculo de x (no caso extremo tem-se que 2 x2 =0, quando na verdade x2 ≠0).

No caso da equação x2−26x+1=0, é preferível utilizar a relação x1.x2 =1,

donde obtém-se que 0.038519

961 . 25 1 2 = = x .‡ Exemplo 5 ([53]) Calcular o valor de 9999− 9998.

Com cinco algarismos significativos, tem-se que (utilizando a máquina Texas TI-83):

(11)

e a diferença

tem apenas um algarismo significativo. Nesta situação, para obter mais algarismos significativos, é preferível usar a relação

q p q p q p + − = − 2 2 , uma vez que obtemos 9999− 9998=1/199.99=0.0050003, com cinco algarismos significativos.

Estes últimos três exemplos evidenciam que o cálculo numérico a partir duma certa expressão algébrica dada pode não ser a melhor forma de cálculo ao termos em consideração o efeito dos erros de arredondamento. Uma reescrita da expressão (ou fórmula) inicial pode constituir uma alternativa mais conveniente. Dito isto por outras palavras, fórmulas algebricamente equivalentes deixam geralmente de o ser quando usadas com aritmética computacional de precisão finita.

4.3 Multiplicação e Divisão

As operações de multiplicação e divisão em ponto flutuante, contrariamente ao que se passava com a adição e a subtracção, não requerem

que as mantissas estejam alinhadas. Se 1

1 1 e b m x = × e 2 2 2 e b m x = × , então

(

)

1 2 2 1 2 1 e e b m m x x × = × × + e

(

)

1 2 2 1 2 1 e e b m m x x ÷ = × × − .

E portanto são necessários três passos para multiplicar dois números: multiplicar as mantissas, adicionar os expoentes e normalizar e arredondar correctamente o resultado. Analogamente, a divisão requere o quociente das mantissas e a diferença dos expoentes. No entanto, a multiplicação e a divisão das mantissas é substancialmente mais complicado do que a adição ou a subtracção.

(12)

Consideremos primeiramente a multiplicação de dois números reais x e 1

2

x , e sejam, como anteriormente, y= x1×x2 e ~y=round

(

x1×x2

)

o resultado exacto e o resultado obtido em ponto flutuante, respectivamente. Então,

(

1 2

) (

[

1 1

) (

11 2

)

2

]

(

1 3

) (

1 3

)(

1 1

)(

1 2

)

1 2

~ round x x x x x x

y = × = +δ +δ +δ = +δ +δ +δ ×

o que quer dizer que o resultado y~ é idêntico ao que se obteria com operandos perturbados. Os erros absoluto A e relativo R são dados agora por

(

)(

)(

)

[

1 3 1 2 1 1 1

]

x1x2 A= +δ +δ +δ − e R=

(

1+δ3

)(

1+δ2

)(

1+δ1

)

−1 e, por conseguinte,

(

xx

)

xx

(

R

)

round y= = 1+ ~ 2 1 2 1 .

O teorema 4.1 permite estimar o erro relativo, tendo-se que θµ

=3.03

R , com θ ≤1. (4.6)

Repetindo o processo efectuado para a multiplicação, tem-se:

(

)

(

)

(

2

)

2 1 1 3 2 1 1 1 1 ~ x x x x round y δ + δ + δ + =       =

e novamente se verifica que o resultado y~ é igual ao que se obteria com operandos perturbados.

Para estimar o erro nesta operação, verifica-se que ([50] pp. 16-17):

(

)

(

)

(

)

= +

( )

µ δ + δ + 1 1.013 1 1 1 2 1 3 , com θ ≤1.

Assim, os erros absolutos A e relativo R são dados por

2 1 03 . 3 x x A= θµ e R=3.03θµ, com θ ≤1. Então temos que

(

R

)

x x x x round y = +      = 1 ~ 2 1 2 1 .

(13)

Tendo em conta a representação em ponto flutuante, conclui-se que a multiplicação ou a divisão por uma potência da base, se não produzir overflow ou underflow, é uma operação exacta.

Como já foi mencionado, qualquer cálculo aritmético na máquina Casio CFX – 9850 é executado internamente com 15 dígitos para a mantissa. A máquina procede a um arredondamento para 10 dígitos, antes de o mostrar no visor, por exemplo:

Cálculo efectuado Resultado obtido

225806 31 : 10 7 31 : 10 7 6 6 − × × 451612903 . 0 4516 . 225806 Tabela 4.1

Embora o resultado apresentado para 7×106 :31

no visor da máquina tenha sido com apenas 10 dígitos, o resultado interno obtido foi 225806.451612903 (com 15 dígitos). Este resultado pode ser sempre armazenado na memória e utilizado sempre que se torne necessário. Como refere R. Ralha em [53],

um procedimento frequente por parte dos alunos consiste em transcrever para o papel resultados que entrarão mais tarde noutros cálculos e que copiarão então de novo para a máquina, quando necessários; não fazendo utilização da memória, perdem tempo neste processo de transcrição, aumentam enormemente a probabilidade de trabalhar com dados errados e não usam a precisão máxima da máquina.

Assim sendo, o aluno deverá ter presente uma regra básica: não deverão ser feitos arredondamentos intermédios num cálculo envolvendo operações consecutivas, devendo em cada operação utilizar o máximo de precisão que a máquina puder dar, evitando-se assim arredondamentos intermédios, forçados pelo utilizador.

(14)

Existem diversos exemplos numéricos semelhantes aos apresentados e que nos permitem conhecer os limites da calculadora ([58] pp. 44-48).

4.4 Condicionamento e estabilidade numérica

4.4.1 Condicionamento de um problema

Em virtude da existência de erros iniciais, os dados e os parâmetros de um problema numérico, não são, de um modo geral, os valores exactos. Assim, se a solução exacta do problema inicial for muito diferente da solução exacta do problema resolvido, seja qual for o método utilizado, os resultados obtidos poderão ter erros muito grandes.

Um problema cuja solução dependa de uma forma “muito sensível” dos dados diz-me mal condicionado. Um problema dir-se-á bem condicionado se, pelo contrário, for pouco sensível a pequenas alterações nos seus dados. Vejamos os seguintes exemplos.

Exemplo 1 ([68] p. 20) Consideremos a equação 0 36 1 3 1 2 = + − x x , (4.7)

cujas raízes são

6 1

2 1 = x =

x . Em F

(

10,6,2

)

a representação de (4.7) é dada por

0 10 77778 . 2 10 33333 . 3 1 2 2 = × + × − − x − x , (4.8)

a qual não possui soluções reais. Neste caso, uma pequena modificação nos coeficientes da equação, originada pela representação dos coeficientes no sistema de vírgula flutuante F

(

10,6,2

)

, altera a natureza das soluções.‡

(15)

Exemplo 2

Consideremos agora a equação

0 49 1 7 2 2 x+ = x , (4.9)

cujas raízes são 0.1428571429

7 1

2 1 = x = ≅

x .

Resolvamos agora esta equação do 2º grau utilizando as duas máquinas usadas neste trabalho. Com a Texas TI-83, utilizando a aplicação PolySmlt, obtemos a seguinte solução:

Ou seja, obtemos um valor aproximado para 7 1

com 10 casas decimais correctas.

Por outro lado, com a Casio CFX – 9850, as soluções da equação (4.9) não são reais.

Note-se que, nos exemplos considerados, os resultados obtidos não dependem do método escolhido para resolver o problema. De facto, o condicionamento de um problema é uma propriedade matemática intrínseca ao problema, ou seja, existe no problema mesmo antes de o tentarmos resolver

(16)

numericamente. Mesmo que à partida os dados e os parâmetros de um problema sejam exactos (erros iniciais nulos), o problema do condicionamento continua a pôr-se porque eventuais erros de arredondamento em passos intermédios (por exemplo erros de arredondamento cometidos ao fazer-se a representação no sistema de vírgula flutuante dos dados do problema) crescerão se o problema for mal condicionado.

Vejamos agora o condicionamento de uma função num ponto ([54] pp.1-2). Para isso consideremos o seguinte exemplo.

Seja f(x)=ex

, x=1, δx=10−9

e y=x+δx. Então, podemos afirmar que 000000001

. 1 ~x= y= x+δx=

aproxima x com nove algarismos significativos correctos (o erro relativo é

portanto 9

10− =

δx ). Calculemos agora f(x) e f( y), utilizando para isso a Texas TI-83:

O erro relativo de f( y) como aproximação de f(x) é:

9 10 7183 . 2 ) ( ) ( ) ( × ≈ − x f x f y f

ou seja, a um erro relativo de 9

10− no valor de x corresponde um erro relativo da mesma ordem de grandeza no valor de f(x)=ex

. Consideremos agora x=100 e 9 10− = δx , então 000000001 . 100 ~= y=x+δx= x

aproxima x com 11 algarismos correctos (o erro relativo é 11

10− ). Calculemos agora f

( )

x e f( y), utilizando novamente a Texas TI-83:

(17)

cujo erro relativo é 9 10 ) ( ) ( ) ( ≈ − x f x f y f

. E portanto, contrariamente ao caso anterior para x=1, “perdemos” dois algarismos significativos no cálculo do valor da função. Qual a justificação para esta situação? Tem-se que

f

(

x+δx

)

= f

( )

x +δx.f '

( )

x +O

( )

δx 2 (4.10) e, para xδ suficientemente pequeno, podemos escrever, desprezando o termo proporcional a

( )

δx 2,

(

)

( )

( )

( )

( )

x x x f x xf x f x f x x f δ ⋅ ≈ − δ + ' (4.11) o que mostra que o número

( )

( )

) ( . : x f x f x x kf = ' (4.12)

condiciona a forma como o erro relativo no valor da função

(

)

( )

( )

x f x f x x f +δ −

cresce (ou decresce) a partir do erro relativo

x x δ

na variável independente. Por esta razão, kf

( )

x diz-se o número de condição (relativo) da função f no ponto x . Uma função diz-se mal condicionada se o seu número de condição for muito elevado e bem condicionada, se o seu número de condição for pequeno.

Agora estamos em condições de percebermos a razão dos resultados do erro relativo no cálculo de f

( )

1 e f

(

100

)

, obtidos no exemplo dado. De

facto, para x

e x

(18)

( )

x e e x x k x x f = = . :

o qual cresce com x e, portanto, quanto maior for o valor de x , mais mal condicionada é a função f .

Por exemplo, no caso de g

( )

x = x, tem-se

( )

2 1 2 1 = ⋅ = x x x x kg

e portanto, o cálculo de x é sempre bem condicionado independentemente do valor de x . De facto, os erros relativos no cálculo da raiz quadrada de um número tendem a ser reduzidos para metade.

4.4.2 Estabilidade numérica

Se o resultado intermédio de um cálculo numérico for “contaminado” por um erro de arredondamento, esse erro influenciará todos os resultados subsequentes que dependam desse resultado intermédio, ou seja, o erro de arredondamento propagar-se-á. Embora o erro de arredondamento seja relativamente pequeno, a alteração por ele introduzido nos cálculos seguintes pode ser muito grande. A “grandeza” dessa alteração pode depender de forma crucial da maneira como estão organizados os cálculos seguintes, isto é, do algoritmo que estivermos a utilizar. Diremos que um algoritmo sofre de instabilidade numérica se produzir uma amplificação inaceitável dos erros de arredondamento intermédios, com consequente influência no resultado final. Por outras palavras, o algoritmo será instável se piorar o condicionamento do problema. Contrariamente, um algoritmo será estável se os erros nos resultados intermédios tiverem pouco efeito no resultado final. Já fizemos referência em 4.2 ao problema do cancelamento subtractivo como fonte de aumento de erro relativo.

É conveniente sublinhar o facto de que, embora relacionados, os conceitos de condição e estabilidade não são equivalentes. Por um lado,

(19)

porque um determinado problema poderá ser resolvido por mais de um algoritmo, podendo uns ser estáveis e outros não. Todavia, um problema ou é bem condicionado ou mal condicionado e, se for mal condicionado, não existe um algoritmo que permita obter bons resultados. Por outro lado, um algoritmo instável pode destruir a solução de um problema bem condicionado.

Vejamos novamente o exemplo 3 dado em 4.2. que mostra claramente a diferença entre condicionamento e estabilidade. Neste pretendia-se calcular o valor da função f

( )

x =1−cosx para valores de x “muito pequenos”. O número de condição desta função é dado por

( )

x senx x x kf cos 1 . − = , com x≠2kπ,k∈Ÿ.

E portanto, tem-se que lim ( ) 2

0 =

→ kf x

x , como pode ser observado no gráfico de

) (x

kg (ver figura 4.1 – gráfico obtido pela Texas TI – 83).

Fig. 4.1 – Gráfico de

( )

x senx x x kf cos 1 . − =

Então, os erros relativos no cálculo do valor da função para valores próximos de zero, tendem a ser ampliados para o dobro, o que não é muito grave. Assim, esta função pode ser considerada bem condicionada. Todavia, o cálculo do valor da função para valores de x≈0 provoca cancelamento subtractivo. Então sugere-se a utilização da expressão

( )

x x x g cos 1 sin2 + = .

Como f e g representam a mesma função tem-se que

( )

x k

( )

x

kf = g , para x≠π+kπ,k∈Ÿ.

No entanto, para valores próximos de x próximos de zero, os valores de f

( )

x e g

( )

x poderão coincidir em poucos ou nenhuns algarismos significativos.

(20)

Vejamos o que se passa nas máquinas utilizadas neste estudo. Consideremos, em primeiro lugar, a Texas TI – 83 e calculemos o valor das funções f

( )

x e g

( )

x para k

x= 10 , com − k=1:7. Os resultados obtidos encontram-se na tabela seguinte:

x f

( )

x g

( )

x 1 10− 4.99583472197×10−3 3 10 743 9958347219 . 4 × − 2 10− 4.999958333×10−5 4.9999583334721×10−5 3 10− 4.9999996×10−7 4.9999995833335×10−7 4 10− 5×10−9 9 10 334 9999999958 . 4 × − 5 10− 5×10−11 11 10 5× − 6 10− 0 13 10 5× − 7 10− 0 15 10 5× − Tabela 4.2 – Valores de f e g obtidos pela Texas TI – 83

Considerando a máquina Casio CFX - 9850, obteríamos resultados muito semelhantes. Como se pode verificar na primeira linha da tabela, para x=10−1

, os valores de f

( )

x e g

( )

x diferem apenas nos dois últimos algarismos apresentados. No entanto, à medida que o valor de x diminui o valor da função tende para zero, e particularmente no caso de 6

10− = x , obtemos 0 ) (x = f e g(x)=5×10−13

. Esta situação decorre do facto de f ser numericamente instável para valores de x pequenos, em virtude do cancelamento subtractivo. De facto, para x=10−6

(21)

Por outro lado, no caso da expressão que define a função g , tem-se ) 1 2 ( 10 5 ) 10 ( −k = × − k+

g , para k≥5. É claro que para k=50, se tem que g(x)=0

uma vez que 99

min 10 −

=

N .

De um modo geral, pode ocorrer um erro de arredondamento em qualquer uma das operações envolvidas no cálculo de g(x), no entanto, mostra-se que o valor calculado é

(

x x

)

g x

g( )= +δ

~ (4.13)

com xδ pequeno, ou seja, a fórmula é estável. ‡

Vejamos um outro exemplo que também ilustra a diferença entre condicionamento e estabilidade ([54] pp. 3-4). Consideremos a função

x x

x

f( )= +1− , para x>0. Então tem-se que

( )

( )

( )

x x f x f x x kf 1 1 2 1 . + = = ' .

E portanto, tem-se que

2 1 ) ( lim = +∞ → kf x

x , o que nos permite concluir que a função

f é bem condicionada. Consideremos agora a função g , definida por

(

)(

)

x x x x x x x x x x x x x g + + = + + − + = + + + + − + = 1 1 1 1 1 1 1 ) ( .

Logo temos que kf

( )

x =kg

( )

x , para todo o x>0. No entanto, para valores grandes de x , os valores de f(x) e g(x) poderão coincidir em poucos ou mesmo nenhuns algarismos significativos.

Vejamos o que se passa nas máquinas utilizadas neste estudo. Consideremos, em primeiro lugar, a Texas TI – 83 e calculemos o valor das funções f

( )

x e g

( )

x para k

x=10 , com k=6:14. Os resultados obtidos encontram-se na tabela seguinte:

(22)

x f

( )

x g

( )

x 6 10 4.999999×10−4 4 10 99999875 . 4 × − 7 10 1.581139×10−4 4 10 58113879 . 1 × − 8 10 5×10−5 5 10 99999999 . 4 × − 9 10 1.5811×10−5 5 10 58113883 . 1 × − 10 10 5×10−6 6 10 5× − 11 10 1.58×10−6 6 10 58113883 . 1 × − 12 10 0 7 10 5× − 13 10 0 7 10 58113883 . 1 × − 14 10 0 8 10 5× − Tabela 4.3 – Valores de f e g obtidos pela Texas TI – 83

Analisando a tabela podemos verificar, por exemplo, que para x=107

, os valores de f

( )

x e g

( )

x diferem apenas nos últimos três algarismos, enquanto que para x=1012

, obtemos f(x)=0 e g(x)=5×10−7.

Neste exemplo, analogamente ao caso apresentando anteriormente, o cálculo dos valores de f(x) é numericamente instável, devido ao cancelamento subtractivo. No caso de x=1012

, na máquina Texas TI – 83, tem-se que 1+x=x, e portanto f(x)=0 com um erro relativo de 100%, ou seja, nenhum algarismo significativo. Assim, no caso da expressão que define g , a máquina Texas TI – 83 considera para x=1012 (note-se que neste caso o único erro é cometido na soma de 1+x, as restantes operações são exactas)

7 6 6 12 12 12 2 10 0.5 10 5 10 1 10 2 1 10 1 10 1 ) ( = × − = × − × = = + + = x g

e este resultado é de facto o valor correcto com 12 algarismos significativos.

Os resultados obtidos com a calculadora Casio CFX – 9850 são muito semelhantes aos que se encontram na tabela 4.3 diferindo somente em dois aspectos: obtém-se mais um dígito no valor das funções f

( )

x e g

( )

x e

( )

x =0

f para x=1014

(23)

4.4.3 Funções mal e bem condicionadas

Suponhamos que se pretende determinar o valor de f(x) utilizando um valor de x exacto e um algoritmo numericamente estável. Na prática, poderemos obter um valor calculado ~f(x) muito diferente do valor exacto

) (x f . Considerando

( )

x f

(

x x

)

f = +δ ~

e mesmo que xδ seja pequeno, ~f

( )

x poderá afastar-se do valor exacto f(x), se o número de condição kf(x) for grande, ou seja, se f for mal condicionada

neste ponto.

O mau condicionamento é um problema inerente à função que só poderá ser removido se for possível substituir a função por uma outra que possua melhor condicionamento no ponto em questão. De uma forma geral, esta solução não é possível, todavia apresenta-se em seguida um exemplo onde tal objectivo é atingido ([54] pp. 5-6).

Consideremos neste exemplo a máquina Texas TI – 83 onde 13

10− =

ε .

Seja a função f(x)=ln(x), com x>0 e x=1+10−14

. Então, utilizando o software Mathematica tem-se que

14 15 14 10 10 9995 9999999999 . 9 ) 10 1 ln( + − = × − ≈ − . Na máquina obtemos

com elevado erro relativo. De facto, para a função f , temos

( )

) ln( 1 ) ln( 1 x x x x x kf = ⋅ =

(24)

e portanto = + =+∞ → 0 1 ) ( lim 1kf x

x . Logo a função f é mal condicionada para

valores de x≈1. Como 14

10

1+ −

=

x não tem representação exacta na Texas TI – 83, será representado por x~= x+δx, com

ε < = + = δ − − 14 14 14 10 10 1 10 x x

e assim será calculado o valor de ln

( )

x~ tal que

x x x k x x x f δ ⋅ ≈ − ) ( ) ln( ) ln( ) ~ ln(

e por conseguinte ln

( )

x~ tem menos algarismos correctos do que x~ . Para superar esta situação, consideremos o desenvolvimento em série de potências de θ

(

)

... 4 3 2 1 ln 4 3 2 + θ − θ + θ − θ = θ + e considerando 14 10− = θ , obtemos a aproximação

( )

2 ) 1 ln( 2 2 θ − θ = θ ≈ θ + T

com um erro de truncatura que é (por se tratar de uma série alternada convergente) inferior ao valor absoluto do primeiro termo desprezado, que

neste caso tem o valor de 43

3 10 33 3 − × ≈ θ

. Utilizando esta expressão na Texas TI – 83 obtém-se a aproximação

que é claramente muito melhor do que a dada anteriormente. Vejamos por que razão isto acontece. A condição do polinómio

( )

2 2 2 θ − θ = θ T é

(25)

( )

(

)

( )

2 2 2 1 1 2 1 . 2 ≈ − θ+ θ θ − θ θ − θ = θ O kT

então, para θ pequeno,

( )

1

2 θ ≈

T

k . Logo pequenos erros relativos no valor de θ

produzirão erros relativos igualmente pequenos no valor calculado de T2

( )

θ .‡

4.4.4 Condicionamento de funções de duas variáveis

Consideremos uma função de duas variáveis15, de classe 2

C ([54] p. 7). Então, desprezando os termos de ordem superior à primeira, tem-se

(

)

(

)

(

)

(

x y

)

y f y y x x f x y x f y y x x f , , , , ∂ ∂ ⋅ δ + ∂ ∂ ⋅ δ + ≈ δ + δ + (4.14) isto é,

(

)

(

)

(

)

(

x y

)

y f y y x x f x y x f y y x x f , , , , ∂ ∂ ⋅ δ + ∂ ∂ ⋅ δ ≈ − δ + δ + (4.15)

Para estudar o erro relativo no valor da função é mais fácil analisar o efeito do erro relativo em cada uma das variáveis separadamente. Assim para a variável

x tem-se

(

)

(

)

(

)

(

)

(

)

x x y x f y x x f x y x f y x f y x x f δ ∂ ⋅ ≈ − δ + . , , , , , (4.16)

e uma expressão semelhante para a variável y .

Vejamos um exemplo. No artigo Should We be Concerned about Roundoff Error? ([40]), o autor considera a função

(

)

(

)

y x y y y y x x y y x f 2 5 . 5 2 121 11 75 . 333 , = 6+ 2 2 2 − 6 − 4 − + 8 +

e estuda os erros no cálculo de f para x=77617 e y=33096. O valor exacto, utilizando o software Mathematica, uma vez que f é uma função racional, é

15

(26)

In[48]:=H33375ê100L33096^6+ 77617^2I117761723309623309661213309642M+ H11ê2L330968+ 77617 233096 Out[48]=−54767 66192 In[49]:= N@%, 24D Out[49]=−0.82739605994682136814117 .

Neste mesmo programa, executando as operações no modo aproximado, com uma precisão de 16 algarismos, obtemos

In[51]:=333.75330966+

776172I117761723309623309661213309642M+

5.5330968+ 77617

233096

Out[51]=1.18059×1021

Este valor está completamente errado, nem mesmo o sinal é o correcto. Na máquina Texas TI – 83 obtém-se o valor 7.917111342×1036, ao passo que na Casio CFX – 9850, obtém-se 7.917009777×1036

. Por que razão os valores obtidos numericamente são tão diferentes do valor exacto?

Tem-se

(

)

32 10 04 . 2 33096 , 77617 ≈− × ∂ ∂ x f e

(

)

32 10 78 . 4 33096 , 77617 ≈ × ∂ ∂ y f

e por conseguinte, pequenas perturbações xδ e yδ originam enormes erros nos resultados. Apesar do valor calculado ser o exacto de f

(

x+δx,y+δx

)

onde δ e x δ são da ordem da unidade de erro de arredondamento y

16 53 10 2 . 2 2− ≈ × − =

ε , tem-se, representando por ~f

(

x,y

)

o valor calculado que

(

)

(

)

(

)

( )

(

32

)

10 . , , , ~ O O y x f y y x x f y x f = +δ +δ ≈ + ε

e portanto, a diferença entre o valor exacto f

(

x,y

)

e o valor calculado f~

(

x,y

)

será enorme.‡

(27)

4.4.5 Condicionamento dos zeros de uma função

Já foi referido que no caso de o valor de f '

( )

x ser grande, então pequenos erros absolutos em x produzirão erros absolutos muito maiores no correspondente valor de f

( )

x .

Consideramos agora a seguinte situação. Pretende-se determinar um zero de f , digamos z . Então torna-se necessário calcular os valores de f em vários pontos próximos de z . Qual o papel de f '

( )

z ? Vejamos que quanto menor for a variação de f na vizinhança do zero z mais mal condicionado será o problema.

O valor calculado ~f

( )

x corresponde em aritmética exacta a um ponto x

x+δ . Escrevemos

( )

x f

(

x x

)

f = +δ

~

e, assumindo que z é uma raiz simples de f , existe uma vizinhança de z onde f não se anula. Assim podemos escrever, desprezando o resto de ' segunda ordem na série de Taylor

( )

( )

( )

x f x f x f x ' ~ − ≈ δ (4.17)

E portanto, a partir de (4.17) podemos concluir que para o mesmo erro na função, o erro na variável independente x cresce de forma proporcional a

( )

x f'

1 . No caso de x= e uma vez que z f

( )

z =0, tem-se

( )

( )

z f z f x ' ~ ≈ δ (4.18)

e, por conseguinte, dizemos que 1 f'

( )

z é o número de condição absoluto do zero z .

Se consideramos z uma raiz de multiplicidade m≥2 da equação

( )

x =0 f , tem-se

( )

0, ) ( = z f k para k=1:m−1.

(28)

Assumindo que a função f é de classe m+1 num intervalo que contenha z , tem-se pela fórmula de Taylor com resto de ordem m+1, desprezando o resto, que

( )

(

)

m

( ) ( )

m z m z f z z f z f = +δ ≈ ⋅ δ ! ~ ( ) (4.19) Donde vem que

( )

( )

m m z f z f m z 1 ) ( ~ !⋅ ≈ δ (4.20)

Assim, o erro zδ crescerá com a multiplicidade m , mesmo que f(m)

( )

z não seja pequeno ([54] pp. 8-9).

Vejamos um exemplo para ilustrar a situação descrita anteriormente. Seja f uma função polinomial definida por

(

)

10

3 )

(x = x−

f (4.21)

que admite uma raiz z=3 de multiplicidade 10. A partir de (4.20) tem-se

( )

( )

110 10 1 ~ ! 10 ~ ! 10 f z f z z ≈ ⋅ = δ

e, por conseguinte, um pequeno erro da ordem de 20

10− em ~f

( )

z , por exemplo, corresponderá um erro da ordem de 2

10− em z.

Suponhamos que a factorização (4.21) era desconhecida e o polinómio estava escrito na forma

( )

59049 196830 295245 262440 153090 61236 17010 3240 405 30 2 3 4 5 6 7 8 9 10 + − + − + − + − + − = x x x x x x x x x x x f . (4.22)

Utilizando a máquina Texas TI – 83 (a máquina Casio CFX – 9850 apenas permite resolver equações polinomiais até grau 3), o valor de f para x=3 dá exactamente zero. Por outro lado, utilizando a já mencionada aplicação PolySmlt obtemos o seguinte resultado

(29)

ou seja, obtemos duas raízes reais.

Consideremos por exemplo 2

10

3+ −

=

x , então o valor de f obtido pela

máquina Texas TI – 83 é 7 10 4× − − . O valor exacto é

(

2

)

20 10 10 3+ − = − f .

Obtivemos portanto um erro absoluto da ordem de 7

10− no valor calculado mas que corresponde, em aritmética exacta, a

771 . 2 10 4 3−10 × 7 ≈ = − x .

Por conseguinte, a um erro

(

7

)

10−

O no valor de ~f

( )

x corresponde neste caso a um erro aproximadamente igual a 22920. .

Um aspecto que é particularmente grave é o facto de que o sinal do valor da função calculado estar errado. Assim sendo, considerando agora

2 10 3 3+ × − = x , obtém-se o valor 7 10

5× − e, por conseguinte, pelo corolário do Teorema de Bolzano pode-se concluir que existe um zero no intervalo

[

3.01,3.03

]

. É de referir que a máquina Texas TI – 83, na sua aplicação PolySmlt, deverá utilizar o método de bissecção. Portanto, o resultado que obtivemos anteriormente nesta máquina foi calculado com um elevado erro.

Vejamos as representações gráficas da função f dadas pelas expressões (4.21) e (4.22), respectivamente:

(30)

Fig. 4.3 - Gráfico obtido com a janela

[

2.6,3.4

]

×

[

−2.05×10−6,4.09×10−6

]

Pela análise do segundo gráfico podemos de facto concluir que para valores próximos de x=3, erros numéricos no cálculo de f

( )

x , traduzem-se em importantes erros relativos e, em muitos casos, até o sinal do valor de f

( )

x está errado.‡

Referências

Documentos relacionados

4.5 Conclusões: Este trabalho mostrou um modelo criado para representar uma linha de transmissão monofásica através de uma cascata de circuitos π, cujos parâmetros longitudinais

Se destacando também como estudo de caso, este, por sua vez, analisa um ou poucos fatos com profundidade e pode ser utilizadas para desenvolver entrevistas,

É primeiramente no plano clínico que a noção de inconscien- te começa a se impor, antes que as dificuldades conceituais envolvi- das na sua formulação comecem a ser

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Foi presente à Câmara o requerimento apresentado por Tomás Eduardo Pimentel Tavares do Canto, residente em Travessa da Graça n.º 9 B, freguesia de São Pedro, Concelho

Note on the occurrence of the crebeater seal, Lobodon carcinophagus (Hombron &amp; Jacquinot, 1842) (Mammalia: Pinnipedia), in Rio de Janeiro State, Brazil.. On May 12, 2003,

[r]

Com relação à germinação das sementes armazenadas em câmara fria, aos três meses de armazenamento (Tabela 10), observou-se em sementes tratadas ou não com fungicidas e