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 , , .