30
Operações aritméticas em sistema de vírgula flutuante Funções e Calculadoras Gráficas: análise de algumas inferências erróneas 77 4 Operações aritméticas em sistema de vírgula flutuante 4.1 Introdução É imediato reconhecer que, dados dois números F x x 2 1 , , 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 ( ) 2 , 4 , 10 F , sejam 2 1 10 125 . 3 × = x e 3 2 10 137 . 2 - × = x . Então, como 2 2 10 00002137 . 0 × = x , vem que 2 2 1 10 12502137 . 3 × = + x x não pertence a ( ) 2 , 4 , 10 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

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

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

77

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

flutuante

4.1 Introdução

É imediato reconhecer que, dados dois números Fxx ∈21 , , 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

( )2,4,10F , sejam 2

1 10125.3 ×=x e 3

2 10137.2 −×=x . Então, como

2

2 1000002137.0 ×=x , vem que 2

21 1012502137.3 ×=+ xx não pertence a

( )2,4,10F . No sistema binário, 1 e 10 são ambos números do sistema de ponto

flutuante, enquanto que 101 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 242− pertencem ao sistema, mas a soma 2421 −+ 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

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

78

comutativa, distributiva, associativa e elemento neutro). De facto, no primeiro

exemplo referido anteriormente, tem-se que 121 xxx =+ e no entanto, 02 ≠x .

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 1x e 2x números do sistema de ponto flutuante, +, -, ×, ÷ as

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)

2121

2121

2121

212

121

21

.

.

eesebmbm

eesebbmm

bmbmxxeee

eee

me

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

( ) 21

2121

eebmmxx

+××=× e 21

2

1

2

1 eeb

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;

5. Arredondamento da mantissa;

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

79

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 1x e 2x são números do sistema de ponto flutuante então

( )2121 xxroundxx +=⊕ ,

( )2121 xxroundxx −=Ο ,

( )2121 xxroundxx ×=⊗ ,

e ( )2121 xxroundxx ÷=Θ ,

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 21 xx + pertença ao

intervalo normalizado, que

( )( )δ++=⊕ 12121 xxxx ,

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 2421 −+ , 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 ( ) zyx −+ , no formato simples, onde

1=x , 252−=y e 1=z 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,

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

80

uma vez que 020.1 ×== zx e 2520.1 −×=y . A soma exacta dos primeiros dois

números é

0000100000000000000000000.1=+ yx .

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

tendo-se

1=⊕ yx .

O resultado final é então

( ) 011 =Θ=Θ⊕ zyx .

No entanto, o resultado correcto é

( ) 252−=−+ zyx ,

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 ( ) yzx +− . �

4.2 Soma e Subtracção

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

(exacto) da sua soma, isto é, 21 xxy += . Designando por ( )21~ xxroundy += o

resultado desta operação em ( )qpbF ,, e aplicando o teorema 3.1 temos que:

( ) ( )111 1 δ+= xxround

( ) ( )222 1 δ+= xxround

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

vem que:

( ) ( ) ( )[ ] ( )3221121 111~ δ+×δ++δ+=+= xxxxroundy , com µ≤ε<δδδ 321 ,, .

Ou seja, ( )( ) ( )( ) 223113 1111~ xxy δ+δ++δ+δ+= . Desta expressão conclui-se que

o resultado da soma de dois números em ponto flutuante é idêntico ao que se

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

81

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

( )( ) 113 11 xδ+δ+ em vez de 1x , e ( )( ) 223 11 xδ+δ+ no lugar de 2x . No entanto,

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

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

da forma ( )iδ+1 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 iδ números tais que µ≤δ i com ni ,...,1= e µ um

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

1≤θ e tal que

( ) µθ+=δ+∏=

nn

i

i 01.1111

. É

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:

( )( )2211201.1~ xxyyA θ+θµ=−=

+θ+

+θµ=

−=

21

22

21

1102.2

~

xx

x

xx

x

y

yyR .

Então, temos que

( ) µ≤

++

+θθµ≤ 02.2,max02.2

21

2

21

121

xx

x

xx

xR .

Existe um outro modo de apresentar estes resultados:

( ) ( )( )Rxxxxroundy ++=+= 1~2121 , com µ≤ 02.2R . � (4.3)

14 A demonstração deste teorema encontra-se em [50] pp. 14-15.

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

82

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

aritmética IEEE754. Consideremos os números 1211

emx ×= e 2222

emx ×= . Se

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

1m e 2m . O resultado final é dado por ( ) 1221

emm ×+ , o qual necessita ser

normalizado se 221 ≥+ mm ou se 121 <+ mm . Por exemplo, o resultado de

adicionar ( ) 1

2 2100.13 ×= a ( ) 1

2 2000.12 ×= é

( ) 1

2 200000000000001000000000.1 ×

+ ( ) 1

2 200000000000000000000000.1 ×

= ( ) 1

2 200000000000001000000000.10 ×

Normalizando, obtém-se ( ) 2

2 200000000000000100000000.1 × .

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

21 ee > , 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 2100.13 ×= a ( ) 1

2 2100.14

3 −×= , obtemos

( ) 1

2 200000000000001000000000.1 ×

+ ( ) 1

2 200000000000000110000000.0 ×

= ( ) 1

2 200000000000001110000000.1 × .

Consideremos agora a adição de 3 com 2323 −× . Temos que

( ) 1

2 200000000000001000000000.1 ×

+ ( ) 1

2 21|000100000000000000000000.0 ×

= ( ) 1

2 21|000100000000001000000000.1 × (4.4)

Arredondamento por defeito: ( ) 1

2 2000100000000001000000000.1 ×

Arredondamento por excesso: ( ) 1

2 2001000000000001000000000.1 × .

Neste caso, o resultado não é um número do sistema de ponto flutuante do

formato simples, uma vez que a mantissa tem 24 bits depois do ponto binário.

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

83

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 )221(3 2322 −− ++− ou,

equivalentemente, adicionar 3 a )221( 2322 −− ++− . Temos que

( ) 1

2 200000000000001000000000.1 ×

- ( ) 1

2 21|00100000000001000000000.0 ×

= ( ) 1

2 21|11011111111111111111111.0 × (4.5)

Normalizando: ( ) 0

2 210111111111111111111111.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 01 >x e 02 <x . Então, 21 xxy += 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

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

84

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 ( )AF ,2,4,10 , 2

1 103787.4 −×=x e 2

2 103783.4 −×=x e

calcule-se 21 xxy −= . O resultado exacto é 6

21 104 −×=−= xxy . Em

( )AF ,2,4,10 , tem-se que ( ) 2

1 10379.4 −×=xfl e ( ) 2

2 10378.4 −×=xfl . Então

( ) 5

21 10000.1~ −×=−= xxfly e, por conseguinte, 6106 −×=A e

5.1104

1066

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 1x e 2x . Sabe-se que esses valores

deverão situar-se no intervalo [ [1,0 . 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: 9800.01 =x , 9804.02 =x . No documento, que serviu de base à

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

( )000.0=r . Analisemos o sucedido. Designando por 1x e 2x , respectivamente,

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

980.02 =x . Logo o resultado da máquina é 000.0=r . O valor exacto da

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

85

subtracção é 0004.021 −=−= xxr , pelo que o doente deveria ser operado. De

notar que o erro relativo de r é dado por

10004.0

0004.0==

−=

r

rrR , ou seja, 100%.‡

Exemplo 3

Pretende-se calcular o valor da função ( ) xxf cos1−= para valores de x muito

pequenos, 310−≤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 0≈x , tem-se que 1cos ≈x e portanto, o cálculo de

( )xf provoca cancelamento subtractivo. Um algoritmo alternativo que evite

esta dificuldade é por exemplo:

( )( ) ( )xgx

x

x

x

x

xxxxf =

+=

+

−=

+

+−=−=

cos1

sin

cos1

cos1

cos1

cos1cos1cos1)(

22

.

Consideremos, por exemplo, 910−=x . Tem-se, utilizando a máquina Texas

TI-83, que:

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

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

86

Exemplo 4 ([53])

Determinar as raízes da equação 01262 =+− xx , usando apenas cinco

algarismos significativos.

Aplicando a fórmula resolvente tem-se que 16813±=x e com cinco

algarismos significativos tem-se que 961.1213±=x . Assim sendo, as raízes

desta equação são aproximadamente 961.251 =x e 039.02 =x . 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 21 xx >> . Como ultrapassar esta situação?

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

grau, tem-se que:

2

400

222 PSS

xPSxxcbxax−±

=⇔=+−⇔=++ ,

onde 21 xxS += e 21.xxP = . Nos casos em que, por exemplo 21 xx >> , o

cálculo de PS 42 − provoca cancelamento subtractivo e produz elevado erro no

cálculo de 2x (no caso extremo tem-se que 02 =x , quando na verdade 02 ≠x ).

No caso da equação 01262 =+− xx , é preferível utilizar a relação 1. 21 =xx ,

donde obtém-se que 038519.0961.25

12 ==x .‡

Exemplo 5 ([53])

Calcular o valor de 99989999 − .

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

TI-83):

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

87

e a diferença

tem apenas um algarismo significativo. Nesta situação, para obter mais

algarismos significativos, é preferível usar a relação qp

qpqp

+

−=−

22

, uma vez

que obtemos 0050003.099.199/199989999 ==− , 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

11

ebmx ×= e 2

22

ebmx ×= , então

( ) 21

2121

eebmmxx

+××=× e ( ) 21

2121

eebmmxx

−××=÷ .

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.

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

88

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

2x , e sejam, como anteriormente, 21 xxy ×= e ( )21~ xxroundy ×= o resultado

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

( ) ( ) ( )[ ]( ) ( )( )( ) 212133221121 111111~ xxxxxxroundy ×δ+δ+δ+=δ+δ+δ+=×=

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

( )( )( )[ ] 21123 1111 xxA −δ+δ+δ+= e ( )( )( ) 1111 123 −δ+δ+δ+=R

e, por conseguinte,

( ) ( )Rxxxxroundy +== 1~2121 .

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

θµ= 03.3R , com 1≤θ . (4.6)

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

( )( )( ) 22

113

2

1

1

11~

x

x

x

xroundy

δ+

δ+δ+=

=

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):

( )( )( )

( )µ+=δ+

δ+δ+ 301.11

1

11

2

13 , com 1≤θ .

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

2

103.3x

xA θµ= e θµ= 03.3R , com 1≤θ .

Então temos que

( )Rx

x

x

xroundy +=

= 1~

2

1

2

1 .�

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

89

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

22580631:107

31:107

6

6

−×

×

451612903.0

4516.225806

Tabela 4.1

Embora o resultado apresentado para 31:107 6× 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.

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

90

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

036

1

3

12 =+− xx , (4.7)

cujas raízes são 6

121 == xx . Em ( )2,6,10F a representação de (4.7) é dada por

01077778.21033333.3 212 =×+×− −− xx , (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 ( )2,6,10F , altera a natureza das soluções.‡

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

91

Exemplo 2

Consideremos agora a equação

049

1

7

22 =+− xx , (4.9)

cujas raízes são 1428571429.07

121 ≅== xx .

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

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

92

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 xexf =)( , 1=x , 910−=δx e xxy δ+= . Então, podemos afirmar que

000000001.1~ =δ+== xxyx

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

portanto 910−=δx ). Calculemos agora )(xf e )(yf , utilizando para isso a

Texas TI-83:

O erro relativo de )(yf como aproximação de )(xf é:

9107183.2)(

)()(−×≈

xf

xfyf

ou seja, a um erro relativo de 910− no valor de x corresponde um erro relativo

da mesma ordem de grandeza no valor de xexf =)( .

Consideremos agora 100=x e 910−=δx , então

000000001.100~ =δ+== xxyx

aproxima x com 11 algarismos correctos (o erro relativo é 1110− ). Calculemos

agora ( )xf e )(yf , utilizando novamente a Texas TI-83:

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

93

cujo erro relativo é 910)(

)()(−≈

xf

xfyf. E portanto, contrariamente ao caso

anterior para 1=x , “perdemos” dois algarismos significativos no cálculo do

valor da função. Qual a justificação para esta situação? Tem-se que

( ) ( ) ( ) ( )2. xOxfxxfxxf δ+δ+=δ+ ' (4.10)

e, para xδ suficientemente pequeno, podemos escrever, desprezando o termo

proporcional a ( )2xδ ,

( ) ( )( )

( )( ) x

x

xf

xxf

xf

xfxxf δ⋅≈

−δ+ ' (4.11)

o que mostra que o número

( ) ( ))(

.:

xf

xfxxk f

' = (4.12)

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

( ) ( )( )xf

xfxxf −δ+

cresce (ou decresce) a partir do erro relativo

x

na variável independente. Por esta razão, ( )xk f 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 ( )1f e ( )100f , obtidos no exemplo dado. De

facto, para xexf =)( , o número de condição é, de acordo com (4.12),

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

94

( ) xe

exxk

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 ( ) xxg = , tem-se

( )2

12

1

=

=x

xx

xk g

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,

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

95

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 ( ) xxf cos1−= para valores de x “muito pequenos”. O número

de condição desta função é dado por

( )x

senxxxk f

cos1

.

−= , com ∈π≠ kkx ,2 Ÿ.

E portanto, tem-se que 2)(lim0

=→

xk fx

, como pode ser observado no gráfico de

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

Fig. 4.1 – Gráfico de ( )x

senxxxk f

cos1

.

−=

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 0≈x provoca cancelamento

subtractivo. Então sugere-se a utilização da expressão

( )x

xxg

cos1

sin 2

+= .

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

( ) ( )xkxk gf = , para ∈π+π≠ kkx , Ÿ.

No entanto, para valores próximos de x próximos de zero, os valores de ( )xf

e ( )xg poderão coincidir em poucos ou nenhuns algarismos significativos.

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

96

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 ( )xf e ( )xg para kx −= 10 , com 7:1=k . Os resultados obtidos

encontram-se na tabela seguinte:

x ( )xf ( )xg

110− 31079958347219.4 −× 3107439958347219.4 −×

210− 510999958333.4 −× 5107219999583334.4 −×

310− 7109999996.4 −× 7103359999995833.4 −×

410− 9105 −× 9103349999999958.4 −×

510− 11105 −× 11105 −×

610− 0 13105 −×

710− 0 15105 −×

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 110−=x ,

os valores de ( )xf e ( )xg 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 610−=x , obtemos

0)( =xf e 13105)( −×=xg . 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 610−=x tem-se

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

97

Por outro lado, no caso da expressão que define a função g , tem-se

)12(105)10( +−− ×= kkg , para 5≥k . É claro que para 50=k , se tem que 0)( =xg

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 )(xg , no entanto,

mostra-se que o valor calculado é

( )xxgxg δ+=)(~ (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

xxxf −+= 1)( , para 0>x .

Então tem-se que

( ) ( )( )

x

xf

xfxxk f

112

1.

+

== '

.

E portanto, tem-se que 2

1)(lim =

+∞→xk f

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

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

( )( )xxxx

xx

xx

xxxxxg

++=

++

−+=

++

++−+=

1

1

1

1

1

11)( .

Logo temos que ( ) ( )xkxk gf = , para todo o 0>x . No entanto, para valores

grandes de x , os valores de )(xf e )(xg 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 ( )xf e ( )xg para kx 10= , com 14:6=k . Os resultados obtidos

encontram-se na tabela seguinte:

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

98

x ( )xf ( )xg

610 410999999.4 −× 41099999875.4 −×

710 410581139.1 −× 41058113879.1 −×

810 5105 −× 51099999999.4 −×

910 5105811.1 −× 51058113883.1 −×

1010 6105 −× 6105 −×

1110 61058.1 −× 61058113883.1 −×

1210 0 7105 −×

1310 0 71058113883.1 −×

1410 0 8105 −×

Tabela 4.3 – Valores de f e g obtidos pela Texas TI – 83

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

valores de ( )xf e ( )xg diferem apenas nos últimos três algarismos, enquanto

que para 1210=x , obtemos 0)( =xf e 7105)( −×=xg .

Neste exemplo, analogamente ao caso apresentando anteriormente, o

cálculo dos valores de )(xf é numericamente instável, devido ao

cancelamento subtractivo. No caso de 1210=x , na máquina Texas TI – 83,

tem-se que xx =+1 , e portanto 0)( =xf 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 1210=x (note-se que neste caso o

único erro é cometido na soma de x+1 , as restantes operações são exactas)

76

6121212105105.0

102

1

102

1

10110

1)( −− ×=×=

×==

++=xg

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 ( )xf e ( )xg e

( ) 0=xf para 1410=x . ‡

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

99

4.4.3 Funções mal e bem condicionadas

Suponhamos que se pretende determinar o valor de )(xf utilizando um

valor de x exacto e um algoritmo numericamente estável. Na prática,

poderemos obter um valor calculado )(~xf muito diferente do valor exacto

)(xf . Considerando

( ) ( )xxfxf δ+=~

e mesmo que xδ seja pequeno, ( )xf~

poderá afastar-se do valor exacto )(xf ,

se o número de condição )(xk f 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 1310−=ε .

Seja a função )ln()( xxf = , com 0>x e 14101 −+=x . Então, utilizando o

software Mathematica tem-se que

141514 101099959999999999.9)101ln( −−− ≈×=+ .

Na máquina obtemos

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

( ))ln(

1

)ln(

1

xx

xx

xk f =⋅

=

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

100

e portanto +∞==+→ 0

1)(lim

1xk f

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

valores de 1≈x . Como 14101 −+=x não tem representação exacta na Texas

TI – 83, será representado por xxx δ+=~ , com

ε<=+

−14

14

14

10101

10

x

x

e assim será calculado o valor de ( )x~ln tal que

x

xxk

x

xxf

δ⋅≈

−)(

)ln(

)ln()~ln(

e por conseguinte ( )x~ln tem menos algarismos correctos do que x~ . Para

superar esta situação, consideremos o desenvolvimento em série de potências

de θ

( ) ...432

1ln432

−θ

−θ=θ+

e considerando 1410−=θ , obtemos a aproximação

( )2

)1ln(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 433

10333

−×≈θ

. 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 é

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

101

( )( ) ( )2

2 2

11

2

1.

2θ+θ−≈

θ−θ

θ−θ=θ OkT

então, para θ pequeno, ( ) 12

≈θTk . Logo pequenos erros relativos no valor de θ

produzirão erros relativos igualmente pequenos no valor calculado de ( )θ2T .‡

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

Consideremos uma função de duas variáveis15, de classe 2C ([54] p. 7).

Então, desprezando os termos de ordem superior à primeira, tem-se

( ) ( ) ( ) ( )yxy

fyyx

x

fxyxfyyxxf ,,,,

∂⋅δ+

∂⋅δ+≈δ+δ+ (4.14)

isto é,

( ) ( ) ( ) ( )yxy

fyyx

x

fxyxfyyxxf ,,,,

∂⋅δ+

∂⋅δ≈−δ+δ+ (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

yxf

yxx

fx

yxf

yxfyxxf δ∂

∂⋅

≈−δ+

.,

,

,

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

xyyyyxxyyxf

25.521211175.333, 8462226 ++−−−+=

e estuda os erros no cálculo de f para 77617=x e 33096=y . O valor exacto,

utilizando o software Mathematica, uma vez que f é uma função racional, é

15 O procedimento para o caso de uma função de três ou mais variáveis é análogo.

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

102

In[48]:= H33375ê100L∗33096^6+

77617^2 I11∗776172∗330962 −330966 −121∗330964−2M+

H11ê2L∗330968+77617

2∗33096

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.75∗330966+

776172 I11∗776172∗330962−330966−121∗330964−2M+

5.5∗330968+

77617

2∗33096

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 3610917111342.7 × , ao passo que na

Casio CFX – 9850, obtém-se 3610917009777.7 × . Por que razão os valores

obtidos numericamente são tão diferentes do valor exacto?

Tem-se

( ) 321004.233096,77617 ×−≈∂

x

f e ( ) 321078.433096,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 ( )xyxxf δ+δ+ ,

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

1653 102.22 −− ×≈=ε , tem-se, representando por ( )yxf ,~

o valor calculado que

( ) ( ) ( ) ( ) ( )3210.,,,~

OOyxfyyxxfyxf ε+≈δ+δ+=

e portanto, a diferença entre o valor exacto ( )yxf , e o valor calculado ( )yxf ,~

será enorme.‡

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

103

4.4.5 Condicionamento dos zeros de uma função

Já foi referido que no caso de o valor de ( )xf ' ser grande, então

pequenos erros absolutos em x produzirão erros absolutos muito maiores no

correspondente valor de ( )xf .

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 ( )zf ' ? 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 ( )xf~ corresponde em aritmética exacta a um ponto

xx δ+ . Escrevemos

( ) ( )xxfxf δ+=~

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

( ) ( )( )xf

xfxfx

'

~−

≈δ (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

( )xf '1 . No caso de zx = e uma vez que ( ) 0=zf , tem-se

( )( )zfzf

x'

~

≈δ (4.18)

e, por conseguinte, dizemos que ( )zf '1 é o número de condição absoluto do

zero z .

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

( ) 0=xf , tem-se

( ) ,0)( =zf k para 1:1 −= mk .

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

104

Assumindo que a função f é de classe 1+m num intervalo que contenha z ,

tem-se pela fórmula de Taylor com resto de ordem 1+m , desprezando o resto,

que

( ) ( ) ( ) ( )mm

zm

zfzzfzf δ⋅≈δ+=

!

~ )(

(4.19)

Donde vem que

( )( )

m

m zf

zfmz

1

)(

~

!⋅≈δ (4.20)

Assim, o erro zδ crescerá com a multiplicidade m , mesmo que ( )zf m)( 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

( )103)( −= xxf (4.21)

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

( ) ( ) 10110

1

~

!10

~

!10 zfzf

z =⋅≈δ

e, por conseguinte, um pequeno erro da ordem de 2010− em ( )zf~

, por exemplo,

corresponderá um erro da ordem de 210− em z .

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

estava escrito na forma

( )

59049196830295245262440

1530906123617010324040530

23

45678910

+−+−

+−+−+−=

xxx

xxxxxxxxf

. (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 3=x dá

exactamente zero. Por outro lado, utilizando a já mencionada aplicação

PolySmlt obtemos o seguinte resultado

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

105

ou seja, obtemos duas raízes reais.

Consideremos por exemplo 2103 −+=x , então o valor de f obtido pela

máquina Texas TI – 83 é 7104 −×− . O valor exacto é ( ) 202 10103 −− =+f .

Obtivemos portanto um erro absoluto da ordem de 710− no valor calculado mas

que corresponde, em aritmética exacta, a

771.21043 10 7 ≈×−= −x .

Por conseguinte, a um erro ( )710−O no valor de ( )xf~

corresponde neste caso a

um erro aproximadamente igual a 2292.0 .

Um aspecto que é particularmente grave é o facto de que o sinal do

valor da função calculado estar errado. Assim sendo, considerando agora

21033 −×+=x , obtém-se o valor 7105 −× e, por conseguinte, pelo corolário do

Teorema de Bolzano pode-se concluir que existe um zero no intervalo

[ ]03.3,01.3 . É 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:

Fig. 4.2 - Gráfico obtido com a janela [ ] [ ]66 1009.4,1005.24.3,6.2 −− ××−×

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

Funções e Calculadoras Gráficas: análise de algumas inferências erróneas

106

Fig. 4.3 - Gráfico obtido com a janela [ ] [ ]66 1009.4,1005.24.3,6.2 −− ××−×

Pela análise do segundo gráfico podemos de facto concluir que para

valores próximos de 3=x , erros numéricos no cálculo de ( )xf , traduzem-se

em importantes erros relativos e, em muitos casos, até o sinal do valor de ( )xf

está errado.‡