ARITMÉTICA DE PONTO FLUTUANTE/ERROS EM OPERAÇÕES
NUMÉRICAS
1. Introdução
O conjunto dos números representáveis em uma máquina
(computadores, calculadoras,...) é finito, e portanto discreto, ou seja não é
possível representar em uma máquina todos os números reais de um dado
intervalo [a, b]. A implicação imediata desse fato é que o resultado de uma
simples operação aritmética ou cálculo de uma função, realizadas com esses
números, podem conter erros.
2. Representação de um número real em uma máquina
Esta representação depende, em geral, da máquina utilizada. A
aritmética de ponto flutuante é universalmente utilizada nos dias atuais.
2. Aritmética de ponto flutuante. Sistemas F(β
β, t, m, M).
Dado um número real não nulo. Este número é representado em ponto
flutuante da seguinte forma:
r = ± (0, d1d 2 d 3 K d t ) × β exp
(2.1)
Onde:
(1) β é a base do sistema e d1, d2, d3, ..., dt é a mantissa (sequência de casas
decimais do número). t é o número de dígitos da mantissa.
(2) 0 ≤ d j ≤ (β − 1) , j = 1, K, t .
(3) O expoente da base, o número representado por exp, está contido no
intervalo de números inteiros [m,M].
Observações:
1. Em um sistema de ponto flutuante dito “normalizado” , d1 ≠ 0 ;
2. O número zero de um sistema de ponto flutuante normalizado tem sua
representação particular:
(2.2)
Em linhas gerais a definição de um sistema de ponto flutuante é a seguinte: união de
todos os números reais não nulos que podem ser representados por (2.1), verificados
os requisitos (1),(2) ,(3) e a observação 1, com o zero que tem sua representação em
(2.2).
EXEMPLO: Considerando-se o sistema hipotético: F(10, 3, -5, 5).
Os números com representação neste sistema podem ser representados da
seguinte forma:
r = ±0, d1d 2 d 3 × 10 exp
Aqui,
• β = 10 (a chamada base decimal)
•
0 ≤ d j ≤ 9 , j = 1,2,3 ( d1 ≠ 0 );
•
exp ∈ [−5 ,5] .
&
t = 3;
Alguns números com representação em F:
r1 = 0,123 × 10 2
r2 = −0,904 × 10 −3
O número 50 teria representação em F ?
Observa-se o seguinte:
r3 = 50 = 50,0 = 50,0 × 10 0 = 5,00 × 101 = 0,500 × 10 2
Ou seja, o número 50 neste sistema é representado da forma: 0,500 ×10 2
Da mesma forma:
r4 = −0,012 = −0,012 × 10 0 = −0,120 × 10 −1
3) O sistema de ponto flutuante como um conjunto
Já foi dito que os números representáveis em uma máquina são
discretos. Isto quer dizer que eles podem ser representados por um conjunto
finito.
Ainda tomando o sistema do último exemplo. Pode-se escrever o
seguinte:
i = menor número não nulo, em valor absoluto, com representação em F
i = 0,100×10-5
a = maior número não nulo, em valor absoluto, com representação em F
a = 0,999×105
Assim, se um número real x tem representação em F:
0,100 × 10 −5 ≤ x ≤ 0,999 × 10 5
Ou, para se ter uma generalização:
i≤ x ≤a
Ou ainda, o conjunto de todos os números não nulos com representação
em F pode ser escrito:
GF = {x ∈ ℜ / i ≤ x ≤ a}
Vejamos o que isto significa:
Considerando-se o sistema F(10, 3, -5, 5) e os números:
x1 = 0,107×107
x2 = 0,314×10-6
Observa-se que x1 > a (este número é maior que o maior número com
representação em F – ocorrência de overflow) e x2 < i (este número é menor
que o menor número com representação em F – ocorrência de underflow). Os
dois números “não tem representação em F”, eles não estão contidos no
conjunto GF.
Obs.: overflow e underflow são considerados erros. Estes erros são cometidos
quando é feita uma operação numérica em que o resultado, o seu valor
absoluto, é maior que o maior número com representação na máquina usada.
Ou quando este resultado, em valor absoluto, é menor que o menor número
com representação na máquina usada.
4. Número de elementos de um GF (NF)
Já foi dito que o conjunto de todos os números com representação em
um sistema F é discreto (o conjunto tem um número finito de elementos). Deste
modo, pode-se determinar esta quantidade de elementos (“contar” os
elementos do conjunto).
Seja, inicialmente, o sistema exemplo F(2, 3, -1, 2). Os números com
representação neste sistema têm a forma:
r = ±0, d1d 2 d 3 × 2 exp
Onde,
β = 2 ; t = 3
0 ≤ d ≤ 1

j

d1 ≠ 0
exp ∈ [− 1,2] = {−1,0,1,2}
Podem-se escrever todos os números positivos com os requisitos anteriores:
0,100×2-1
0,100×20
0,100×21
0,100×22
0,101×2-1
0,101×20
0,101×21
0,101×22
0,110×2-1
0,110×20
0,110×21
0,110×22
0,111×2-1
0,111×20
0,111×21
0,111×22
Foram escritos 16 números positivos. Com os números negativos, a contagem
de números com representação neste sistema dobra: 32. Ou seja, somando-se
o zero, que tem sua representação particular, 0,000×2-1, o número de
elementos com representação neste sistema é: 33.
Percebe-se que este sistema (o conjunto que o representa) tem poucos
elementos. Um outro sistema, com uma quantidade maior de números
representativos, poderia deixar a contagem, como feita acima, inviável. Para
estes, pode-se usar o chamado princípio fundamental da contagem. Vejamos
um exemplo:
Seja o sistema F(10, 3, -2, 2).
Um número com representação neste sistema tem a forma:
r = ±0, d1d 2 d 3 × 10 exp
Onde,
β = 10 ; t = 3
0 ≤ d ≤ 9

j

d 1 ≠ 0
exp ∈ [− 2,2] = {−2,−1,0,1,2}
Trabalha-se com possibilidades para cada termo do número.
Parte do número
Sinal
d1
d2
d3
10exp
Possibilidades
2
9
10
10
5
+ ou 1 ou 2 ou 3 ou ... ou 9
0 ou 1 ou 2 ou 3 ou ... ou 9
0 ou 1 ou 2 ou 3 ou ... ou 9
10-2 ou 10-1 ou 100 ou 101 ou 102
O produto dos números da coluna “possibilidades” dá o número de
elementos não nulos com representação no sistema:
N = 2 × 9 × 10 × 10 × 5 = 9000
Somando-se o zero do sistema (que tem sua representação particular),
N F = N + 1 = 9001
Tem-se então que o número de elementos com representação no sistema
deste exemplo é 9001.
A generalização para um sistema F(β, t, m, M) pode ser feita com
facilidade. A forma do número com representação neste sistema:
r = ± (0, d1d 2 d 3 K d t ) × β exp
Montando-se a tabela de possibilidades:
Parte do
número
Sinal
d1
d2
d3
Possibilidades
2
β–1
β
β
M
M
dt
βexp
β
(M – m) + 1
Observa-se na tabela que β aparece sozinho t – 1 vezes (d2 até dt). Quando o
produto é feito tem-se:
N = 2( β − 1) β t −1 [( M − m) + 1]
Esta equação representa a quantidade de números não nulos com
representação em um sistema. Somando-se o zero do sistema, tem-se a
quantidade total de elementos de F:
N F = N + 1 = 2( β − 1) β t −1 [( M − m) + 1] + 1
Obs.: O número de possibilidades para βexp é obtido pela contagem dos
elementos do intervalo de inteiros [m, M]. Pode-se chegar à equação que está
na tabela a partir de alguns exemplos simples:
I = [1, 4] = {1, 2, 3, 4}
NI = 4 = (4 -1) + 1
I = [2, 7] = {2, 3, 4, 5, 6, 7}
NI = 6 = (7 -2) + 1
I = [-1, 3] = {-1, 0, 1, 2, 3}
NI = 5 = [3 – (-1)] + 1
Assim:
I = [m, M]
NI = (M – m) +1
Exemplo: Usando-se a equação obtida para NF, será calculada a quantidade de
números com representação no sistema F(10, 4, -99, 99):
N F = 2(10 − 1)103 [(99 + 99) + 1] + 1 = 3582001elementos.
5. Arredondamento/truncamento de um número
Considerando-se o sistema de base decimal F(10, 4, -5, 5). Pode-se
escrever:
a = 0,9999×105
i = 0,1000×10-5
Supondo-se que uma operação aritmética realizada nesta máquina resulte no
número indicado abaixo:
R1 = 0,2034685×103
Este número, em valor absoluto, está entre a e i. No entanto ele tem 7 dígitos
na mantissa, enquanto o sistema exemplo “trabalha” com 4 casas decimais (t =
4). Nesse caso, para o sistema, o número R1 assume a seguinte forma:
R1 = 0,2035×103
ou,
R1 = 0,2034×103
No primeiro caso ouve um arredondamento, o sistema escreve o número “mais
próximo” a R1 com 4 dígitos na mantissa. No segundo caso, o sistema
“desconsiderou” todos os dígitos após a quarta decimal.
Obs.: Ainda com respeito ao arredondamento. Considerando-se último sistema
e o número:
R = 0,13476 × 10 2 . Para este número são escritos duas
aproximações:
R 1 = 0,1347 × 10 2
e
R 2 = 0,1348 × 10 2
Efetuando-se as operações:
R − R 1 = 0,13476 × 10 2 − 0,1347 × 10 2 = 0,006
R − R 2 = 0,13476 × 10 2 − 0,1348 × 10 2 = 0,004
Tem-se aqui;
R − R1 > R − R 2
Isto quer dizer que a aproximação
“desvio”
R 2 está “mais próxima” do número R (o
R − R 2 é menor que o desvio R − R 1 ). O arredondamento do
número está indicado por
R2.
Exemplo: A tabela seguinte ilustra os conceitos de arredondamento e
truncamento.
F(10, 3, -4, 4)
Número
Representação
na base 10 (livre)
arredondamento
truncamento
(I)
1,168
0,1168×101
0,117×101
0,116×101
(II)
10,05
0,1005×102
0,101×102
0,100×102
(III)
-238,15
- 0,23815×103
- 0,238×103
- 0,238×103
(IV)
0,000007
0,7×10-5
UNDERFLOW
(V)
718235,82
0,71823582×106
OVERFLOW
Observação: O número (II), 0,1005×102, foi “arredondado” para 0,101×102.
Contudo este arredondamento poderia ser 0,100×102. A razão para isto vem da
definição de arredondamento mostrada anteriormente. Observa-se o seguinte:
0 ,1005 − 0 ,101 = 0 ,1005 − 0 ,100
Ou seja, o desvio dos dois arredondamentos em relação ao número 0,1005 é o
mesmo. Quando o último dígito de um número é 5 o seu arredondamento pode
ser feito por um critério qualquer. Um dos critérios usados é o “arredondamento
no corte de dígito” que arredonda o número sempre para o maior valor.
6. Erros em operações numéricas
Quando se faz uma operação numérica é necessária a definição do
número de casas decimais que será usado. Por causa disto, eventualmente
haverá arredondamentos a serem feitos (ou truncamentos). Estes
arredondamentos (aproximações que são feitas para que uma certa quantidade
de casas decimais seja verificada) geram erros (afastam o valor real da
operação do valor aproximado). Como o arredondamento é inevitável, esses
erros tem que ser “tolerados”.
Exemplo ilustrativo:
Sejam os números,
x = 0,937×104
e
y = 0,1272×102
Pode-se escrever o segundo número da seguinte maneira:
y = 0,001272×104
Portanto, somando-se os dois números:
S = x + y = 0,938272×104
Em um sistema que trabalha com uma mantissa de quatro dígitos (t = 4):
S = 0,9383×104
no arredondamento
S = 0,9382×104
no truncamento
Erro devido ao arredondamento: Observa-se a “perda” de casas decimais
quando a soma foi escrita no sistema escolhido. Isto gera um “afastamento” da
aproximação
erro.
S em relação ao valor exato S. Este afastamento constitui um
Costuma-se usar equações para se ter uma medida relativa deste erro.
(1) Erro absoluto (desvio absoluto)
E A = S − S = 0 ,28
(2) Erro relativo
ER =
S −S
= 0,298 × 10 −4
S
Observação: Os valores dos erros absoluto e relativo, para o último exemplo
ilustrativo, não produzem conclusões definitivas. O valor de um erro pode ter
significância se os parâmetros envolvidos forem grandezas físicas (pressão,
temperatura, condutividade elétrica,...), ou quando se têm o cálculo do erro
várias vezes, de forma seqüencial, comparando os seus valores.
Outro exemplo envolvendo erro em operação numérica
Seja a função linear f(x) = 7x – 3. Pretende-se encontrar o valor de x tal
que f(x) = 0.
Este problema consiste, simplesmente, em resolver a equação:
7x – 3 = 0
Então tem-se:
x = 3/7
Escrevendo-se este número usando ponto flutuante:
x = 0,428571428....
O número apresentou-se com um número de casas decimais infinitas. Como
uma máquina trabalha com uma mantissa definida, este número teria que ser
arredondado.
1º caso: Supondo que se desejasse trabalhar com três casas decimais:
x = 0,429
Aplicando-se este valor na função:
f ( x ) = 7(0,429) − 3 = 0,003
Este valor não retorna à função o valor zero. A diferença é considerada um erro
devido ao arredondamento.
2º caso: Usando, agora, 4 casas decimais:
x = 0,4286
Aplicando-se este valor na função:
f ( x ) = 7(0,4286) − 3 = 0,0002
Novamente a função não retornou o valor zero para a função. No
entanto a “distância” ao zero diminuiu.
Levando-se estes resultados para analisar as operações numéricas de
um modo geral, pode-se dizer que para alcançar uma maior precisão deve-se
usar uma quantidade de casas decimais maior. Na maioria dos processos
numéricos isto acarreta num aumento do número de operações numéricas
envolvidas no processo (aumento do “tempo computacional”).
Download

) ,0( × ±= d ddd r K