Representação
de números e teoria de erros
Representação
em Ponto Flutuante
Começamos por ver como representamos um qualquer número
real.
Um número real é uma classe de equivalência de
sucessões de Cauchy de racionais. Como tal, pode admitir várias
representações, mas normalmente tomamos como representante
dessa classe uma sucessão de racionais que são múltiplos
de uma potência de 10 (base decimal):
Notação Científica:
x = ± 0. a1 a2 ... an ...
× 10t
No caso da notação científica, um número representa-se
através do sinal, da mantissa e do expoente, na base decimal. Os
dígitos variam entre 0 e 9, mas o primeiro dígito da mantissa
deve ser diferente de zero (o número zero é representado
à parte).
Mas, a menos que estivessemos na posse de uma máquina com memória
infinita (... máquina de Turing), a representação
de um número deve ser finita, pelo que, consequentemente somos obrigados
a considerar um número finito de dígitos na mantissa e uma
limitação nos valores dos expoentes admitidos.
Sistema de Ponto Flutuante (também designado Vírgula
Flutuante)
O sistema FP(ß, n, t1, t2) é o conjunto
dos números
x = ± 0. a1 a2 ... an ×
ßt
com a1¹0, (onde t varia
em { t1, ..., t2} ) e em que o zero é representado
à parte.
Habitualmente usamos ß=10, e nos computadores ß=2 (neste
caso os dígitos ai podem ser apenas 0 ou 1)
Overflow: Acontece se o valor do expoente t é
superior a t2.
Underflow: Acontece se o valor do expoente t é
inferior a t1.
Arredondamento
Dado um número, representado em notação científica
x = ± 0. a1 a2 ... an an+1
... × 10t
ao armazená-lo num sistema FP somos obrigados a suprimir dígitos
da mantissa.
Para efectuar essa conversão podemos considerar dois tipos de
arredondamento:
Arredondamento por Corte
fl(x) = ± 0. a1 a2 ... an
× 10t
Arredondamento Simétrico
fl(x) = ± 0. a'1 a'2 ... a'n
× 10t'
Os dígitos a'i coincidem com ai e o expoente
t' coincide com t, se an+1 < 5.
Se an+1 > 5 então os dígitos a'i
e o expoente t' resultam da representação da soma de
0. a1 a2 ... an × 10t
com 0.1 × 10t - n+1.
Definição: Consideremos
x
um valor exacto e x~ um valor aproximado de
x.
Definimos:
Erro : ex= x - x~
Erro Absoluto : | ex | = | x - x~ |
Erro Relativo : |dx |
= | x - x~ | / | x | (se x¹0)
Como em cada operação são efectuados arredondamentos,
convém estabelecer um majorante u para esses erros, de forma
que
|darr | = | x - fl( x
) | / | x | < u
O majorante u é designado unidade de arredondamento.
-
No caso de arredondamento por corte : u = ß1- n
-
No caso de arredondamento simétrico : u = ½ ß1-
n
onde ß = 10 é a base.
Propagação de erros. Condicionamento
e Estabilidade.
Consideramos agora a propagação de erros por aplicação
de uma função ou de uma operação.
Assim, pretendemos prever o erro relativo em f(x~)
face ao valor correcto f(x).
Por aplicação da fórmula de Taylor, para uma função
regular obtemos
f(x~) = f(x)+f '(x)ex+
o(ex)
Portanto, desprezando o termo o(ex), obtemos ef(x)»f
'(x)ex
Dividindo por f(x), obtemos então a fórmula
para o erro relativo
que nos permite avaliar a propagação do erro por aplicação
de uma função.
O valor Pf (x) = x f '(x)/f(x) é
designado número de condição de f
em
x.
Se este valor for elevado isso significa que há um grande incremento
do erro relativo por aplicação da função. Uma
situação em que isso é claro, é quando Pf
(z)
= ¥ e tomamos um valor
z~ próximo
de z.
De forma semelhante, para funções de várias variáveis,
podemos aplicar a fórmula de Taylor para várias variáveis
e obter resultados análogos. Um caso que nos interessa considerar
é o caso de operações elementares, como a soma ou
a multiplicação, que podem ser vistas como funções
de duas variáveis.
Assim, para a soma (ou subtracção) temos
dx+y » |
x
(x+y) |
dx + |
y
(x+y) |
dy |
o que nos indica imediatamente que haverá problemas quando x»
-y, ou seja no caso da subtracção de quantidades semelhantes.
Este caso é normalmente designado por
cancelamento subtractivo
e pode ser responsável pela forte propagação de erros
de arredondamento, devido a um acumular de erros em sucessivas subtracções
de quantidades próximas.
No caso da multiplicação (ou divisão), esse problema
já não acontece pois temos
Propagação em Algoritmos
Na maioria das vezes o resultado de uma função é
obtido através de um algoritmo que permite decompor o seu cálculo
em vários passos que nos levam a funções já
programadas.
Assim, para calcularmos os valores de f(x) = cos(x) - log(x2+cos(x)),
podemos considerar o algoritmo em 5 passos:
z1 = cos(x), z2 = x2, z3 = z1+z2, z4 = log(z3), z5 = z1-z4
No entanto, em cada um destes passos devemos considerar um erro, já
que pelo menos haverá uma representação inexacta do
valor real, devido ao arredondamento para o sistema FP.
Assim, ao analisarmos a propagação dos erros, temos
dz1 »
-
x tan(x)dx +darr1
dz2 »
2dx +darr2
dz3 »
(z1 dz1+ z2 dz2
) /(z1+z2) + darr3 = (cos(x)dz1
+
x2dz2 )/(x2+cos(x))
+ darr3 =
= (cos(x)(- x tan(x)dx
+darr1) + x2(2dx
+darr2))/(x2+cos(x))
+ darr3 = ...
dz4 » dz3
/ log(z3) + darr4 = (...)
dz5 »
(z1 dz1 - z4 dz4
) /(z1-z4) + darr5 = (...)
O resultado final pode ser expresso em termos de
dz5 »
Pf(x)dx
+ q1darr1+...+ q4darr4+
darr5
em que o valor Pf(x) é exactamente o número de
condição, e em que os coeficientes q1, ..., q4
são valores que dependem de x e podem ser elevados mesmo
quando Pf(x) não o é. Ainda que esses coeficientes
estejam apenas a multiplicar pelos pequenos erros relativos de arredondamento
(que serão em módulo inferiores à unidade de arredondamento),
a sua acumulação num algoritmo extenso pode provocar alterações
significativas no resultado.
Condicionamento e Estabilidade
Identificamos assim um outro tipo de problema que pode não estar
relacionado com a função, mas sim com a maneira como o cálculo
efectuado, através do algoritmo. Poderá acontecer que dois
algoritmos diferentes, equivalentes do ponto vista algébrico, não
o sejam do ponto de vista numérico, devido à propagação
de erros. Distinguimos assim duas noções:
Definição: Um problema
diz-se bem condicionado se pequenos erros relativos
nos dados produzem pequenos erros relativos no resultado. Caso contrário,
diz-se mal condicionado.
(O caso de mau condicionamento para cálculo de uma função
corresponde a ter um número de condição Pf
elevado)
Definição: Um algoritmo
é numericamente estável se a pequenos
erros relativos dos dados, e a pequenos valores da unidade de arredondamento,
corresponder um pequeno erro relativo nos resultados. Caso contrário,
diz-se numericamente instável.
(O caso de instabilidade numérica corresponde a ter um número
de condição Pf elevado ou um dos coeficientes
qk elevado)
É claro que um algoritmo implementado num problema mal condicionado
nunca poderá ser estável.
Observação: A noção de "pequeno"
pode parecer ambígua, e depende da exigência de rigor pretendida
nos resultados. Normalmente deve ser encarada como uma medida comparativa
entre os diversos algoritmos disponíveis. Assim, ao obtermos para
um determinado algoritmo
| d resultados | <M
( u + max { | ddados | } )
para uma certa constante M > 0, podemos dizer que ele é estável,
e através dessa constante podemos comparar a sua estabilidade com
outros.