4 operações aritméticas em sistema de vírgula flutuante
TRANSCRIPT
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
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.‡