Você está na página 1de 10

cálculo numérico

Aritmética de ponto flutuante


e Erros absoluto e relativo

formador autor Joyce Bevilacqua


1
cálculo numérico
Aritmética de ponto
flutuante e Erros
Absoluto e relativo

1. Aritmética de ponto flutuante

Representação numérica: aritmética


de ponto flutuante
O número de dígitos que pode ser usado para represen-
tar uma unidade padrão (ou palavra) no computador de-
pende de sua arquitetura. Podemos ter processadores
que trabalham com 16, 32, 64 ou N (não sabemos onde
iremos parar...) bits ou dígitos binários, para a represen-
tação dos números reais. Por causa dessa representa-
ção finita, os números reais não podem ser totalmente
representados, independente da máquina que estamos
usando. Ou seja, a aproximação de alguns números é
inevitável e é de fato um grande problema, pois envolve
diretamente a precisão dos resultados de um determi-
nado cálculo e pode ser uma fonte importante de erros.
Inicialmente, as representações numéricas eram fei-
tas através da representação de ponto fixo, ou seja, o
usuário deveria definir a cada operação quantos dígitos
deviam ser usados em cada palavra, para representar as
partes inteira e fracionária. Com este tipo de estrutura –
como o próprio nome diz – fixa, trabalhar com números
grandes e pequenos simultaneamente sempre gerava
um grande erro, independente da escolha do usuário.
As arquiteturas atuais utilizam aritmética de ponto flutuante, a qual
possibilita uma maior representatividade dos números.

Ponto flutuante
A representação numérica em ponto flutuante de qualquer número no
computador segue o seguinte esquema:

número  =  (sinal) . d1 d2 d3 ... dm × B exp

onde

→→ m = mantissa que identifica o número de algarismos significativos


(esta é a precisão simples);
→→ B = base ou característica (indica a representação, usualmente a bi-
nária);
→→ exp = expoente, um número inteiro que pode assumir valores em
um intervalo [Emin , Emax];
→→ f = d1 d2 d3 ... dm , parte fracionária do número, onde 0 ≤ di ≤ B -1, com
d1 diferente de zero.

Os valores de m, B, o intervalo de exp, variam de acordo com o hardware e


o compilador, e mesmo em calculadoras simples a quantidade de núme-
ros que pode ser representada é bastante satisfatória. Mas, independente
do tamanho do conjunto numérico que temos a disposição, estamos tra-
balhando com um conjunto discreto e finito de representações exatas e
as aproximações são automáticas, definidas pelo compilador.

Exemplo 1
Suponha um computador cujo conjunto numérico N1 (Fig 1) seja definido
pelos seguintes parâmetros:

m = 1 (apenas um dígito na mantissa)


B = 10 (base 10)
exp = [-1,1] (o expoente pode assumir apenas 3 valores: -1, 0 e 1)

Com esses parâmetros, qualquer número é representado por:

(sinal) 0. d1 × 10 exp

onde d1 é diferente de zero e, no caso da base 10 um dígito entre 1 e 9.


Logo, o conjunto N1 é composto pelos seguintes elementos:

Cálculo Numérico  /  Aritmética de Ponto Flutuante e Erros Absoluto e Relativo 3


N1 = { (+/-) 0.d1 × 10-1 , (+/-) 0.d1 × 100 , (+/-) 0.d1 × 101 }

(+/-) 0.d1 × 10-1  =  (+/-) { 0.01, 0.02, ... ,0.09 }

(+/-) 0.d1 × 100  =  (+/-){ 0.1, 0.2, ... , 0.9 }

(+/-) 0.d1 × 101  =  (+/-){ 1, 2, ... , 9}

Fig 1. Representação 0 1 2 3 4 5 6 7 8 9
do conjunto N1.
O zero está represen-
tado apenas como 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
referência, mas
não pertence ao
conjunto de pontos. 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09

Considere os números 34,47 e - 0.073314926, como ficam suas represen-


tações nesse conjunto (B = 10, m = 1, exp no intervalo [- 1,1])?

→→ Representação de 34,47: + . 3 × 10 1 , portanto 34,47 será aproximado


pelo número 3;
→→ Representação de – 0.073314926: – .7 × 10-1 , portanto, – 0.073314926
será aproximado pelo número – 0.07. (observe que o dígito d1 deve
ser sempre diferente de zero).

Exemplo 2
Para uma máquina com base B = 10, mantissa m = 3 ( três algarismos sig-
nificativos), e expoente exp no intervalo [-6,6].

→→ A representação de 34,47 será + .345 × 102, que é o número 34.5


(observe o truncamento na quarta posição).
→→ A representação de - 0.073314926 será – .733 × 10-1, que é o núme-
ro - 0.0733.
→→ O menor número Nmin representado nessa máquina é, em valor ab-
soluto:
Nmim  =  .100 × 10-6  =  0.0000001

Cálculo Numérico  /  Aritmética de Ponto Flutuante e Erros Absoluto e Relativo 4


→→ O maior número Nmax representado nessa máquina é, em valor ab-
soluto:

Nmax  =  .999 × 106  =  999000

Exemplo 3
Para uma base B = 10 e mantissa m = 5 (cinco algarismos significativos), e
expoente exp no intervalo [-4,4].

→→ A representação de 34,47 será: + .34470 × 102, que é o número 34.47.


→→ A representação de – 0.073314926 será: – .73315 × 10-1, que é o nú-
mero – 0.073315.
→→ O menor número N min representado nessa máquina é, em valor
absoluto:
Nmim  =  .10000 × 10-4  =  0.00001

→→ O maior número Nmax representado nessa máquina é, em valor ab-


soluto:
Nmax  =  .99999 × 104  =  9999.9

Portanto, qualquer compilador define, em função do hardware, como


será sua representação e todos os números que temos que representar
estão entre os valores de Nmin e Nmax. Não podem ser representados nú-
meros com valor superior a Nmax (erro de overflow) ou inferior a Nmin (erro
de underflow).
Para padronizar a representação, em 1985 o IEEE (Institute for Electrical
and Electronics Engineers) publicou um relatório definindo normas para
especificação dos formatos da precisão simples, dupla e expandida, que
são geralmente seguidas por todos os fabricantes de computadores que
utilizam ponto flutuante. Para os PCs que utilizam uma representação de
64 bits para um número real, temos:

S EEEEEEEEEEE
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMM

→→ S: sinal — um bit. 0 se positivo, 1 se negativo;


→→ E: expoente — 11 bits. Como esta parte possui 11 dígitos, o expoente
pode variar de 0 a 211 = 2047. Para podermos representar números

Cálculo Numérico  /  Aritmética de Ponto Flutuante e Erros Absoluto e Relativo 5


de magnitude pequena, a variação do expoente fica definida no in-
tervalo [-1023, 1024].
→→ M: mantissa — 52 bits. Isso representa aproximadamente 16 a 17
dígitos decimais.

Na tabela abaixo, que foi retirada do livro “Introdução ao Cálculo Numé-


rico” de Waldir L. Roque, temos alguns exemplos de sistemas de ponto
flutuante:

base mantissa Emin Emax

Padrão IEEE 2 23 -126 127


IBM 3090 16 5 -65 62
CRAY X-MP 2 47 -16385 81900

Precisão simples e dupla


Algumas linguagens como C, FORTRAN, permitem introduzir a precisão
dupla. Em vários algoritmos, como por exemplo o refinamento da solução
no Método de Eliminação de Gauss, algumas passagens devem ser rea-
lizadas com precisão dupla.
Definição de precisão dupla: se um número possui m dígitos na man-
tissa na precisão simples, ele terá 2m dígitos na precisão dupla, ou seja
é o dobro do número de dígitos. Além do aumento do número de posi-
ções na mantissa, alguns compiladores aumentam também o intervalo de
variação do expoente.
Por exemplo, a representação de – 0.073314926 será, com B = 10, man-
tissa m = 3 , e expoente exp no intervalo [-6,6].

→→ Com precisão simples (m = 3) = – .733 × 10-1 = – 0.0733.


→→ Com precisão dupla (m = 2 × 3) = – .733149 × 10-1 = – 0.0733149.

Truncamento e arredondamento
Em todos os exemplos acima, os números que possuíam um número
maior de dígitos que o da mantissa foram truncados (na posição m + 1)
e arredondados. Também não existe uma única maneira de fazer isso,
mas a maioria dos compiladores segue normas bem definidas. Vejamos
as duas mais usuais:

→→ Truncamento: apenas truncar o resultado no dígito m, ignorando o


valor do dígito na posição m + 1 e desprezando todos os dígitos nas

Cálculo Numérico  /  Aritmética de Ponto Flutuante e Erros Absoluto e Relativo 6


posições maiores ou iguais a m + 1. Exemplo: o número 34.47, com
B = 10 e m = 3, na representação truncada ficará representado por:

0.344 × 102  =  34.4

→→ Arredondamento: truncar o número na posição m + 1 e analisar o


dígito dm + 1. Para o caso da base 10, onde os dj’s assumem valores no
conjunto {0, 1, ... , 9}, a análise é feita da seguinte forma:

→→ Se na posição dm + 1 o dígito for menor que 5, o número ficará


representado por: . d1 d2 d3 ... dm × B exp (exatamente igual à forma
truncada);
→→ Se na posição dm + 1 o dígito for maior ou igual a 5, o número fi-
cará representado por: . d1 d2 d3 ... (1 + dm) × Bexp (é somado um ao
valor do digito da posição dm).
Exemplo: o número 34.47, com B = 10 e m = 3, nesta represen-
tação arredondada fica:
Primeiro, truncando na posição m + 1: 0.3447 × 102 (em verme-
lho o dígito que deverá ser analisado).
Depois, arredondando o último dígito: 0.345 × 102 = 34.5 (este
é o resultado final).

Observações:

→→ Esta última, do truncamento seguida do arredondamento, não é a


única forma que existe para “compensar” as perdas na representa-
ção numérica, mas é uma das mais naturais;
→→ Ao efetuar as operações em aritmética de ponto flutuante, a máqui-
na, a cada operação, identifica o resultado dentro de seu conjunto
de representação, ou seja, trunca/arredonda a cada operação;
→→ Sempre que for realizar algum cálculo em aritmética de ponto flutu-
ante é necessário truncar e arredondar a cada operação.

Aritmética de ponto flutuante


Considere a soma de três números, a, b e c, onde a mantissa possui ape-
nas 1 (um) dígito:

a = 0.4
b = 0.5
c = 0.6

Cálculo Numérico  /  Aritmética de Ponto Flutuante e Erros Absoluto e Relativo 7


Caso 1: efetuar os cálculos na ordem (a + b) + c = (0.4 + 0.5) + 0.6.

→→ Primeiro passo: (0.4 + 0.5) = 0.9 (que tem representação exata);


→→ Segundo passo: 0.9 + 0.6 = 1.5 (que será arredondado como na regra
acima) ⇒ 0.9 + 0.6 = 2 (resultado final).

Caso 2: efetuar os cálculos na ordem a + (b + c) = 0.4 + (0.5 + 0.6).

→→ Primeiro passo: (0.5 + 0.6) = 1.1 (que será arredondado como na re-
gra acima) ⇒ (0.5 + 0.6) =1;
→→ Segundo passo: 0.4 + 1.0 = 1.4 (que será arredondado como na regra
acima) ⇒ 0.4 + 1.0 = 1 (resultado final).

Portanto, a aritmética de ponto flutuante não é associativa nem


comutativa!

Observação:
Ao efetuarmos os cálculos nos computadores, a cada operação o resulta-
do é arredondado. Esse procedimento automático nas máquinas é difícil
de ser reproduzido quando estamos fazendo as contas manualmente.
Portanto, sempre que for solicitado efetuar um cálculo com aritmética de
ponto flutuante não esquecer de truncar e arredondar a cada operação.
Todos esses fatores — conjunto finito para a representação numérica,
não-comutatividade, não-associatividade, precisão da representação —
podem causar grandes impactos nos algoritmos. Um erro de arredonda-
mento introduzido no início do processo (na entrada de dados) pode ser
propagado para todas as operações definidas no algoritmo. Dependendo
do caso, isso pode causar até a não-convergênciada solução numérica.

2. Erros absoluto e relativo


Considere um problema qualquer, como, por exemplo, o de resolver um
sistema de equações lineares ou determinar a raiz quadrada de um número.
Sejam os números:

x = valor exato (a solução exata do problema)


e
xa = valor aproximado (obtido através de uma solução numérica).

Cálculo Numérico  /  Aritmética de Ponto Flutuante e Erros Absoluto e Relativo 8


Podemos mensurar se a nossa aproximação xa é boa, ou está dentro de
determinados parâmetros de precisão analisando os valores do erro ab-
soluto ou do erro relativo.

Definição de Erro Absoluto

EAx  =  | x - xa |  =  | valor exato - valor aproximado |

Definição: Erro relativo


Se x é diferente de zero, o erro relativo é definido por:

ERx  =  | (x - xa ) / x |  =  | (valor exato - valor aproximado) / valor exato |

É óbvio que só é possível delimitar valores para os erros, ou seja, definir


qual o maior erro que será admitido, independente do fato de serem ab-
solutos ou relativos, pois nunca conhecemos o valor exato.
Portanto, delimitar o erro significa identificar um intervalo de tama-
nho igual ou menor que a precisão definida para a solução do proble-
ma, que contém o valor aproximado.

EAx  =  | x - xa | < µ, onde µ  >  0 é uma precisão pré-fixada para o problema


ou
ERx  =  | (x - xa ) /xX | < µ, onde µ > 0

Por exemplo, queremos calcular raiz de 2 com precisão de 0.001. Temos


que identificar um intervalo J tal que qualquer valor da solução aproxi-
mada xa escolhido dentro desse intervalo verifique a desigualdade

| sqr(2) - xa | < 0.001

Observações:

1. Cada técnica numérica (algoritmo) está baseada em resultados teóricos


e é através desse suporte teórico que esse intervalo é delimitado. Por-
tanto, não há uma fórmula “mágica” que sirva para qualquer algoritmo.
2. Na prática, os erros relativos têm uma “vantagem” sobre os absolutos
por causa de sua maior independência das escalas. Veja o exemplo:

Cálculo Numérico  /  Aritmética de Ponto Flutuante e Erros Absoluto e Relativo 9


a. Vamos supor que, para um problema qualquer, o valor exato é
dado por x1 = 10 e o valor aproximado por x1 = 11. Calculando os
a
erros pelas definições acima temos que:

Erro absoluto é: EAx = 1


Enquanto que o erro relativo é: ERx = 1/10 = 0.1

b. Num outro problema, o valor exato é dado por x2 = 1000 e o valor


aproximado por x2 = 1001. Calculando os erros, temos:
a

Erro absoluto : EAx = 1 (igual ao do exemplo anterior)


Enquanto que o erro relativo é ERx = 1/1000 = 0.001

No exemplo (b) estamos muito mais próximos da solução exata do que


em (a). A comparação entre os erros relativos elimina o problema das
diferenças das duas escalas, o que não acontece com os erros absolutos.
Estes erros, absoluto e relativo, surgirão com frequência nos tópicos
que iremos estudar na disciplina de Cálculo Numérico.

Precisão da máquina: eps


eps: é a menor diferença entre dois valores que o computador reconhece.
Esta medida de acurácia da máquina é definida como o menor número
em ponto flutuante que, quando somado ao número de ponto flutuante
1.0 (um), produz um resultado diferente de 1.0 (um). Isto significa que nú-
meros inferiores a eps, são efetivamente zeros no computador.

Cálculo Numérico  /  Aritmética de Ponto Flutuante e Erros Absoluto e Relativo 10

Você também pode gostar