Aritmética do computador e erros Introdução Associado a uma representação especifica é necessário definir uma aritmética adaptada. E igualmente necessária de definir métodos para medir e administrar os erros de aproximação. Origem dos erros Erros iniciais Problema mal condicionado, medidas aproximativas, modelo simplificado Erros de arredondamento Representação finita de números reais Erros de truncamento Método numérico de determinação de um valor Erros iniciais Problema mal condicionado: noção formalizada pelo matemático Hadamard (1902*). O princípio é que um problema bem posto é um problema que tem uma solução única e cujo pequenas perturbações nos dados provoquam pequenas perturbações nos resultados. (*)Hadamard Jacques, Sur les problemes aux dérivées partielles et leur signification physique, 1902 Erros de aproximação O computador representa os números de uma forma finita e aproximativa: Precisa de forma de gerenciar o infinitamente pequeno e o infinitamente grande, Precisa de minimizar e medir os erros de aproximação. Os números representados pelo computador não são distribuídos de forma homogênea dentro do conjunto de números reais. Erros de truncamento São os erros consecutivos ao truncamento de processos infinito para a determinação de valores: Exemplo: exponencial de x n 2 3 n x x x x e x 1 1 x ... ... 2 6 n! n 1 n ! O erro de truncamento é provocada quando ex é aproximado por exemplo com: x 2 x3 x e 1 x 2 6 Comentários Mais que o erro cometido, precisamos da precisão de um resultado. Especificar o erro rigorosamente é na maioria dos casos impossível as exigências matemáticas sobre as funções, formulas, etc, envolvidas para poder determinar o erro são difícil a satisfazer). Algoritmos numéricos em geral não são acompanhados de gerenciamento de erro O usuário deve determinar o nível de qualidade de um resultado Administrar o erro Comparação de resultados obtidos com diversas precisões (float, double, extended): os primeiros algarismos idênticos são considerados como dando o melhor resultado. Esse método não funciona ! Administrar o erro Exemplo de não funcionamento do método de comparasão: Considera a função seguinte: x f ( x, y ) 333, 75 x (11x y y 121y 2) 5,5 y 2y Temos f(77617,33096)=-1.18059e+021 com float 6 2 2 2 6 4 8 Temos f(77617,33096)=-1.1805916207174e+021 com double (testes efetuados com Visual C++ e pentium) 54767 Quando o resultado é: f(77617,33096)= 66192 Calculadora Esse método de limitação dos erros não funciona sempre, mas tem um certo domínio de validade. As calculadoras usam esse método e calculam com mais algarismo que os algarismos do “display”, arredondando os resultados calculados. Acompanhamento do erro Existem vários modelos de acompanhamento do erro. O computador, na medida dos cálculos, determina a precisão deles: “selfvalidated computation”. A precisão de um cálculo é conhecido no final desse cálculo. Acompanhamento do erro Existem diversos métodos de acompanhamento: Métodos baseados sobre estatísticas. Métodos baseados sobre intervalos: determinar o intervalo que contem o resultado exato, em geral em função do intervalo que contem os dados de entrada. Medida de erros Erro absoluto: diferencia entre o valor exato e o valor aproximado: v.exata v.aprox Erro relativo: valor absoluto dividido pelo valor exato: v.exata v.aprox v.exata Porcentagem: Erro relativo x 100 Intervalo de confiança Em certas situações, o fato que um dado esta num intervalo é baseado sobre probabilidade. Os intervalos de erros são acompanhados de valor de probabilidades. Exemplo: Se x é dentro do intervalo [-1,1] com a probabilidade 0,95 e y é dentro do intervalo [4,6] com a probabilidade 0,8; x+y é dentro do intervalo [3,7] com a probabilidade minimal: 0,95+0,8-1=0,75. Em geral, pf(x,y) px py 1 Adição de números Xe Ye 1, Xm .2 1, Ym .2 Adição de dois positivos: Determinaçaõ de Xe-Ye e shift right de 1,Xm de Xe-Ye para alignar as mantissas: 1, Xm.2 XeYe XeYe Adição de 1,Ym e 1, Xm.2 Shift right ou left do resultado para chegar a uma forma 1,M com aumento ou diminução do exponente (n), Ye n resultado: 1, M .2 Over-underflow Os números manipulados grande de mais para ser representados provocam um overflow. pequeno de mais para ser representados provocam um underflow. Os sistemas têm feedback diferentes em caso de over ou underflow. Certos param a execução, certos dão uma mensagem e outros representam o número de uma forma especifica. Condicionamento de algoritmos Para poder controlar mais precisão dos calculo, os algoritmos podem ser adaptados: Se várias formulas permitem a determinação de um resultado, nem todas tem a mesma eficiência com os números do computador. No caso de algoritmos iterativos, os passos de iteração podem ser escolhidos de tal forma de ser representáveis em binário. Condicionamento de algoritmos Com a representação usada pelo computador em geral a soma de um número muito grande é pouco significativa: Exemplo: resolução de uma equação do segundo grau. ax2 bx c 0 b b2 4ac b b2 4ac x1 , x2 2a 2a Se b é muito grande em relação com a e c, é mais calcular x2 e x1 em função de x2: x1 c ax 2 Condicionamento de algoritmos No caso de iteração, temos sempre tendência a usar um passo formado por uma potencia de 10: 0,1; 0,01; etc No caso da representação binária, essa tendência é pouca relevante. E melhor usar potencia de 2: 0,24;0,125, etc.