Você está na página 1de 22

MS211 - Cálculo Numérico

Aula 4 – Representação e Operações Aritméticas em Ponto


Flutuante.

Marcos Eduardo Valle


Introdução

Na aula anterior, apresentamos o método da eliminação de


Gauss, equivalentemente a fatoração LU, com pivoteamento
parcial.

Destacamos que, à princípio, esses métodos fornecem a solução


de um sistema linear
Ax “ b,
em que A é uma matriz não singular, i.e., detpAq ‰ 0.

Na prática, porém, devemos estar cientes da limitação imposta


pela representação de números reais num computador.

Vejamos um simples exemplo.


Exemplo - Problemas Numéricos
Considere os sitema linear
„  „  „ 16 
1 1016 x1 10
“ .
1 1 x2 0

Resolvemos ele no GNU Octave fornecendo os seguintes


comandos e obtendo a seguinte resposta:
» A = [1, 1.e+16; 1, 1];
» b = [1.e+16; 0];
» x = Azb
warning: matrix singular to machine precision,
rcond = 1e-16
ans =
1.0000e-16
1.0000e+00
Em palavras, o GNU Octave forneceu como solução do sistema
linear Ax “ b o vetor:
„ ´16  „ 
10 0
x̃ “ « .
1 1

Contudo, a solução correta do sistema linear é


» fi
1016
—´ 16
„ 
˚ 10 ´ 1
ffi 1
x “— – 1016 fl « 1 .
ffi

1016 ´ 1

Note que a primeira componente da solução x̃ fornecida pelo GNU


Octave é muito diferente da primeira componente da solução
correta x˚ !

Parte do problema é resultado da representação de números


reais nos computadores usuais, chamada representação em
ponto flutuante.
Representação em Ponto Flutuante
Definição 1 (Sistema de Ponto Flutuante)
Um número real x ‰ 0 é um ponto flutuante (normalizado) se
pode ser escrito como

x “ ˘0.d1 d2 d3 . . . dt ˆ β e ,

em que
‚ β é a base;
‚ t é o número de dígitos na mantissa, com d1 ‰ 0 e
0 ď dj ď β ´ 1, para todo j “ 1, . . . , t.
‚ e é o exponente, com ´m ď e ď M.
Denotamos por F pβ, t, m, Mq o conjunto de todos os pontos
flutuantes para β, t, m e M fixos e adicionando algumas exceções
como o zero.
Exemplo 2
Considere o sistema F p10, 3, 2, 2q. Represente nesse sistema, se
possível, os números:

x1 “ 0.35, x2 “ ´5.17, x3 “ 0.0123, (1)


x4 “ 5390, x5 “ 0.0003. (2)

Esboce, na reta, o conjunto F p10, 3, 2, 2q.


Exemplo 2
Considere o sistema F p10, 3, 2, 2q. Represente nesse sistema, se
possível, os números:

x1 “ 0.35, x2 “ ´5.17, x3 “ 0.0123, (1)


x4 “ 5390, x5 “ 0.0003. (2)

Esboce, na reta, o conjunto F p10, 3, 2, 2q.

Resposta:

x1 “ 0.350 ˆ 100 , x2 “ ´0.517 ˆ 101 , x3 “ 0.123 ˆ 10´1 .

O número 5390 “ 0.539 ˆ 104 não pode ser representado porque


seu expoente é maior que 2. Tem-se overflow.
O número 0.0003 “ 0.300 ˆ 10´3 não pode ser representado
porque seu exponente é menor que -2. Tem-se um underflow.
A maioria dos computadores trabalha com a base β “ 2. Esse
não é um problema, pois o mesmo número pode ser
representado usando bases diferentes.

Veja, por exemplo no livro texto “M. Ruggiero e V. Lopes. Cálculo


Numérico - Aspectos Teóricos e Computacionais, 2a edição,
Editora Pearson, 1997”, como é feita a mudança de base!

Muitos softwares científicos usam o padrão IEEE precisão dupla


com 64 bits: 1 para o sinal, 11 para o expoente, 52 para a
mantissa.

O padrão IEEE precisão dupla é capaz de representar números


positivos entre 1.79 ˆ 10308 e 2.23 ˆ 10´308 , aproximadamente.

O padrão IEEE possui uma representação especial para o zero,


Inf (obtido após a divisão por zero), e NaN (Not a Number, e.g.
0{0).
Arredondamento em Ponto Flutuante
O arredondamento em ponto flutuante é usado para representar
um número real x, dentro dos limites de representação do
sistema, que não pertence ao conjunto F pβ, t, m, Mq.

Especificamente, arredondar um número x em ponto flutuante


consiste em encontrar x̄ P F pβ, t, m, Mq tal que |x ´ x̄| seja o
menor possível.

Denotaremos por fl a função que associa um número real x ao


seu arredondamento em ponto flutuante, ou seja, x̄ “ flpxq.

O valor |x ´ x̄| é chamado erro absoluto de arredondamento.


|x ´ x̄|
De um modo similar, o valor é chamado erro relativo de
|x|
arredondamento.
Exemplo 3
Represente no sistema F p10, 3, 5, 5q os números

x1 “ 1234.56, x2 “ ´0.00054962, x3 “ 0.9995,


x4 “ 123456.7, x5 “ 0.0000001.
Exemplo 3
Represente no sistema F p10, 3, 5, 5q os números

x1 “ 1234.56, x2 “ ´0.00054962, x3 “ 0.9995,


x4 “ 123456.7, x5 “ 0.0000001.

Resposta:
flpx1 q “ 0.123 ˆ 104 , flpx2 q “ ´0.550 ˆ 10´3 ,
flpx3 q “ 0.100 ˆ 101 .
Para x4 e x5 tem-se overflow e underflow, respectivamente.

Para arredondar um número na base β “ 10, devemos apenas


observar o primeiro dígito a ser descartado. Se ele for menor que
5, deixamos os dígitos inalterados; Se ele é maior ou igual a 5,
devemos somar 1 ao último dígito remanescente.
Épsilon da Máquina

Definição 4 (Épsilon da Máquina)


O épsilon da máquina, denotado por εmach , é a metade da
distância entre 1 e o menor ponto flutuante estritamente maior
que 1.

Pode-se mostrar que o épsilon de uma máquina de um sistema


F pβ, t, m, Mq é
1
ε “ β 1´t .
2

No padrão IEEE precisão dupla, a precisão é

εmach “ 2´52 « 2.2 ˆ 10´16 .


O εmach fornece um limitante superior para o erro relativo do
arredondamento em ponto flutuante.

Especificamente, para qualquer x dentro dos limites de


representação do sistema, existe x̄ P F pβ, t, m, Mq tal que

|x ´ x̄| ď ε|x|.

Esta última inequação resulta na seguinte afirmação:

Proposição:
Para qualquer número real x dentro dos limites de representação
do sistema, existe ε com |ε| ď εmach tal que

flpxq “ xp1 ` εq.


Aritmética de Ponto Flutuante
Além de representar números no computador, precisamos
também efetuar operações com eles.

As operações aritméticas básicas `,´,ˆ e ˜ com números reais,


quando realizadas no computador com sistema F pβ, t, m, Mq,
serão denotadas por ‘, a, b e c.

As operações aritméticas de ponto flutuante são definidas de


modo a satisfazer o axioma:
Axioma das Operações de Ponto Flutuante:
Sejam ˚ uma operação aritmética básica e g seu análogo em
ponto flutuante. Para todo x, y P F pβ, t, m, Mq, deve-se ter

x g y “ flpx ˚ y q.
Em vista do axioma das operações de ponto flutuante, tem-se:

Proposição:
Para quaisquer x, y P F pβ, t, m, Mq, existe ε com |ε| ď εmach tal
que
x g y “ px ˚ y qp1 ` εq,
em que ˚ denota uma operação aritmética básica e g seu
análogo em ponto flutuante.

Essa proposição estabelece uma relação entre a operação


aritmética com números reais e seu análogo em ponto flutuante.
Essa relação possui um papel importante na análise de erros de
algoritmos, que exploraremos na próxima aula!

Por ora, gostaríamos de destacar que as operações de ponto


flutuante não gozam de todas as propriedades das operações dos
números reais!
Exemplo 5 (Associatividade e Distributividade)
Considere o sistema F p10, 3, 5, 5q. Sejam x “ flp11.4q,
y “ flp3.18q e z “ flp5.05q. Efetue as operações:
(a) px ‘ y q ‘ z e x ‘ py ‘ zq.
y bx y
(b) e b x.
z z
(c) y b pz ‘ xq e y b z b y b x.
Exemplo 5 (Associatividade e Distributividade)
Considere o sistema F p10, 3, 5, 5q. Sejam x “ flp11.4q,
y “ flp3.18q e z “ flp5.05q. Efetue as operações:
(a) px ‘ y q ‘ z e x ‘ py ‘ zq.
y bx y
(b) e b x.
z z
(c) y b pz ‘ xq e y b z b y b x.

Resposta:
(a) px ‘ y q ‘ z “ 0.197 ˆ 102 e x ‘ py ‘ zq “ 0.196 ˆ 102 .
x by 1
´y ¯
(b) “ 0.719 ˆ 10 e x b “ 0.718 ˆ 101 .
z z
(c) y b pz ‘ xq “ 0.523 ˆ 101 e py b zq ‘ py b xq “ 0.524 ˆ 101 .
Ao contrário das operações com números reais, as operações de
ponto flutuante não são nem associativas e nem distributivas!
Exemplo 6 (Identidade Não-Nula)
Introduzimos ao GNU Octave os seguintes comandos:
» a = 1; b = 1; while a+b > a; b = b/2; end

Estaríamos num loop infinito se fizéssemos as mesmas


operações com números reais.

Num computador, porém, encontramos


εmach
b “ 1.1102 ˆ 10´16 “ .
2

Note que
» a+b = a,
ou seja, existe na aritmética de ponto flutuante um número b ‰ 0
tal que a ` b “ a.
Exemplo 7 (Estimatimando de π)
Considere a seguinte sequencia de comandos que, teoricamente,
forneceria uma estimativa para o número π:
» z(2)=2;
» for n=2:30;
z(n+1)=2ˆ(n-0.5)*sqrt(1-sqrt(1-(z(n)ˆ2)*4ˆ(1-n)));
end
» semilogy(abs(z(2:end)-pi)/pi);
O último comando produz o seguinte gráfico do erro relativo da
estimativa para π:
100

10-2
Erro Relativo

10-4

10-6

10-8

10-10
0 5 10 15 20 25 30
n

Note que o erro decresce nas primeiras 16 iterações mas depois


cresce devido aos erros de arredondamento.
Exemplo 8 (Cancelamento Numérico)
Sabemos que a identidade

p1 ` xq ´ 1
“ 1,
x
para todo x ‰ 0.
No GNU Octave, porém, encontramos o seguinte:
» x = 1.e-15;
» ((1+x)-1)/x
ans = 1.1102
Note que temos um erro relativo superior a 11% devido ao
cancelamento de algarismos significativos.

Cancelamento de algoritmos significativos foram os responsáveis


pelo erro numérico na solução dos sistema linear do primeiro
exemplo da aula!
Na aula de hoje, apresentamos a representação dos números nos
computadores usuais e destacamos erros que podem surgir na
aritmética de pontos flutuantes.

Os erros de arredondamento, quando repetidos em algoritmos


longos e complexos, podem ter efeitos cadastróficos. Exemplos
incluem:
‚ Fracasso do mìssil Patriot durante a Guerra do Golfo em 1991,
devido a um erro de arredondamento no cálculo de sua
trajetória.
‚ Explosão do míssil Arianne em Junho de 1996 devido à
overflow no computador de bordo.

Na pŕoxima aula, continuaremos nossos estudos sobre erros na


resolução de sistemas lineares.

Muito grato pela atenção!

Você também pode gostar