Objetivo: no contexto de aritmética de máquina (sobre um sistema ponto-flutuante generalizado FL(B,p,L,U)) e suas limitações, apresentar situações onde fenômenos indesejáveis podem ser evitados com boas práticas de programação.
(A) - Overflow
Ocorre quando a computação gera um número que necessitaria
ter expoente
MAIOR do que o máximo permitido
para ser
representado na forma normalizada. A computação PARA, e mensagem
de erro segue-se. Exemplo, em Scilab, para avaliar
para
,
:
--> x=10**(200); y=10**(198); z = sqrt(x*x + y*y)
Overflow evitável (benfeitoria)
Para qualquer inteiro, avaliamos
via
Experimente, em Scilab :
--> x=10**(200); y=10**(198); m=max(abs(x),abs(y)) --> z = m*sqrt( (x/m)**2 + (y/m)**2)
(B) - Underflow
Ocorre quando a computação gera um número que necessitaria
ter expoente
MENOR do que o mínimo permitido
para ser
representado na forma normalizada. A computação pode prosseguir, pois
o número é substituído por ZERO.
Exemplo, em Scilab, para avaliar
para
,
:
--> x=10**(-200); y=10**(-198); z = sqrt(x*x + y*y)
Underflow evitável (benfeitoria)
Para qualquer inteiro, avaliamos
usando a mesma benfeitoria do caso (A):
Experimente, em Scilab :
--> x=10**(-200); y=10**(-198); m=max(abs(x),abs(y)) --> z = m*sqrt( (x/m)**2 + (y/m)**2)
(C) - Subtração catastrófica
Ocorre quando a soma de dois números (em aritmética ponto-flutuante) resulta na subtração de duas quantidades muito próximas uma da outra. Nessa situação, os alguns dos algaritmos de mantissa que estão corretos (nos dois números) vão se cancelar, de maneira que, na resposta (próxima de zero) algarismos não corretos ganham posições mais importantes.
Exemplo: ao avaliarmos
para
valores de
com magnitude cada vez maior, perda de exatidão
é esperada.
Mostre que a expressão
é equivalente a de
, e preencha a tabela abaixo (use notação científica),
![]() |
![]() |
![]() |
![]() |
1.6956378242978D-01 | 1.6956378242978D-01 |
![]() |
||
![]() |
||
![]() |
||
![]() |
||
![]() |
-->format("e",20) -->x=1;y=sqrt(1+exp(-x))-1;z=exp(-x)/(sqrt(1+exp(-x))+1);[x y z] -->x=3*x;y=sqrt(1+exp(-x))-1;z=exp(-x)/(sqrt(1+exp(-x))+1);[x y z]
Exemplo: Em vistas ao problema de perda de exatidão por subtração catastrófica, é sabido que tal problema existe na avaliação da Fórmula de Báskara
no cálculo da raíz de menor magnitude, quando o produto é
próximo de zero, e então
.
Por outro lado, sabida benfeitoria usa a propriedade que o produto das
raízes
e
satisfaz
, e determina
PEDE-SE: em Scilab, encontre, com máxima exatidão, as raízes de
,
onde
,
,
.