Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Federal de Sa˜o Joa˜o Del Rei - UFSJ Institu´ıda pela Lei 10.425, de 19/04/2002 - D.O.U. de 22/04/2002 Pro´-Reitoria de Ensino de Graduac¸a˜o - PROEN Disciplina: Ca´lculo Nume´rico Ano: 2013 Prof: Nata˜ Goulart da Silva Versa˜o Documento 0.91 Ana´lise de Erros Nume´ricos Suma´rio 1 Introduc¸a˜o 2 2 Representac¸a˜o dos Nu´meros 2 2.1 Decomposic¸a˜o de nu´meros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 Conversa˜o de nu´meros entre bases 3 3.1 Bina´rio para decimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.2 Decimal para bina´rio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 Notac¸a˜o de Ponto Flutuante 4 4.1 Representac¸a˜o de Nu´meros em Ponto Flutuante . . . . . . . . . . . . . . . . . . 4 4.2 Aritme´tica de Nu´meros em Ponto Flutuante . . . . . . . . . . . . . . . . . . . . 5 4.3 Erros na representac¸a˜o dos Nu´meros . . . . . . . . . . . . . . . . . . . . . . . . 7 4.4 Operac¸o˜es Aritme´ticas em Ponto Flutuante . . . . . . . . . . . . . . . . . . . . . 8 5 Algarismos Significativos 10 6 Ana´lise de Erros 11 6.1 Erros Absolutos e Relativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.2 Erros de Cancelamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 6.3 Erros de Arredondamento e Truncamento em um Sistema Ponto Flutuante . . . 13 6.4 Propagac¸a˜o dos Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 7 Considerac¸o˜es Finais 17 Refereˆncias 17 1 1 Introduc¸a˜o Na soluc¸a˜o de problemas atrave´s de me´todos nume´ricos, apo´s as fases de definic¸a˜o, mode- lagem, escolha e implementac¸a˜o, verifica-se algumas vezes que os resultados obtidos na˜o apre- sentam valores dentro de uma faixa esperada. Dentre outros fatores, os resultados dependem da precisa˜o dos dados de entrada, da forma como estes dados sa˜o representados no computador e das operac¸o˜es nume´ricas efetuadas. Os dados de entrada apresentam impreciso˜es devido a, por exemplo, falhas no processo de medic¸a˜o e na aquisic¸a˜o destes dados. Para a disciplina de Ca´lculo Nume´rico, sera˜o objeto de estudo os erros devido a modelagem e implementac¸a˜o dos me´todos nume´ricos e neste cap´ıtulo, em especial, dos erros causados pela representac¸a˜o e operac¸o˜es envolvendo nu´meros no computador. As informac¸o˜es contidas neste documento sa˜o notas de aula retiradas dos livros citados na sec¸a˜o Refereˆncias [1, 2, 3]. 2 Representac¸a˜o dos Nu´meros A representac¸a˜o de um nu´mero depende da base escolhida e do nu´mero de d´ıgitos utilizados nesta representac¸a˜o [3]. As bases mais utilizadas sa˜o a bina´ria, a decimal e a hexadecimal. Existem nu´meros como o pi que na˜o podem ser representados por um nu´mero finito de d´ıgitos na base decimal. Enta˜o, independente do nu´mero de d´ıgitos utilizados em ca´lculos com o pi, o resultado desta operac¸a˜o nunca sera´ exato. Quanto maior o nu´mero de d´ıgitos utilizados, maior sera´ a precisa˜o obtida. Quando sa˜o realizados ca´lculos nume´ricos em um computador, os valores de entrada sa˜o normalmente fornecidos pelo usua´rio na base decimal. Toda informac¸a˜o e´ convertida para a base bina´ria, sa˜o realizadas as operac¸o˜es e o resultado e´ convertido para a base decimal e apresentado para o usua´rio. As transformac¸o˜es entre as bases podem ser fontes de erros, porque um nu´mero pode ter representac¸a˜o finita em uma base e na˜o ter representac¸a˜o finita em outra. Esta caracter´ıstica gera erros nume´ricos no processo de transformac¸o˜es entre bases e sera´ apresentada melhor na sec¸a˜o com exemplos de operac¸o˜es de mudanc¸as de base. 2.1 Decomposic¸a˜o de nu´meros Em geral, um nu´mero qualquer formado por n algarismos pode ser decomposto por uma soma de cada um de seus algarismos multiplicado por uma poteˆncia. A poteˆncia depende da base em que o nu´mero e´ representado. Como exemplo, seja o nu´mero 1537 representado na base decimal. Para identificar a base, iremos escrever o nu´mero entre pareˆnteses indexado pela sua base. Exemplo: (1537)10 = 1 ∗ 103 + 5 ∗ 102 + 3 ∗ 101 + 7 ∗ 100 O mesmo procedimento pode ser realizado para nu´meros em outras bases e nu´meros com parte fraciona´ria. 2 Exemplo: (36, 189)10 = 3 ∗ 101 + 6 ∗ 100 + 1 ∗ 10−1 + 8 ∗ 10−2 + 9 ∗ 10−3 (10, 11)2 = 1 ∗ 21 + 0 ∗ 20 + 1 ∗ 2−1 + 1 ∗ 2−2 (21, 03)4 = 2 ∗ 41 + 1 ∗ 40 + 0 ∗ 4−1 + 3 ∗ 4−2 3 Conversa˜o de nu´meros entre bases 3.1 Bina´rio para decimal Para realizarmos a conversa˜o de um nu´mero em qualquer base para um nu´mero na base decimal devemos usar a multiplicac¸a˜o de cada um de seus algarismos pela poteˆncia igual a base. Considerando nu´meros inteiros, o primeiro algarismo a direita, deve ser multiplicado pela base elevada a zero. O pro´ximo algarismo, o segundo da direita para a esquerda, deve ser multiplicado pela base elevada a um, e assim por diante. Nu´meros fraciona´rios tera˜o suas poteˆncias elevadas a -1, -2, -3, ..., a partir do algarismo a` direita da v´ırgula. De um modo geral, um nu´mero na base β, (ajaj−1...a2a1a0)β, 0 ≤ ak ≤ (β − 1), k = 0, 1, 2, ..., j, pode ser escrito na forma polinomial ajβ j + aj−1βj−1 + ...+ a2β2 + a1β1 + a0β0 No exemplo a seguir, temos inicialmente a transformac¸a˜o de um nu´mero inteiro na base bina´ria para a base decimal e posteriormente transformac¸o˜es de nu´meros na base 2 e 4 fra- ciona´rios para a base decimal. Exemplo: (10111)2 = 1 ∗ 24 + 0 ∗ 23 + 1 ∗ 22 + 1 ∗ 21 + 1 ∗ 20 = (23)10 (10, 11)2 = 1 ∗ 21 + 0 ∗ 20 + 1 ∗ 2−1 + 1 ∗ 2−2 = 2 + 0 + 0, 5 + 0, 25 = 2, 75 (21, 03)4 = 2 ∗ 41 + 1 ∗ 40 + 0 ∗ 4−1 + 3 ∗ 4−2 3.2 Decimal para bina´rio A transformac¸a˜o de um nu´mero inteiro na base decimal para um nu´mero na base bina´ria e´ realizada dividindo-se este nu´mero sucessivamente por dois ate´ que o quociente da divisa˜o seja menor que 2. Como exemplo, consideremos a transformac¸a˜o do nu´mero (40)10 para a base bina´ria. Exemplo: 40 0 2 20 0 2 10 0 2 5 1 2 2 0 2 1 ↖ 3 Ao te´rmino da divisa˜o, temos o nu´mero na base bina´ria partindo do u´ltimo quociente e posteriormente os restos das diviso˜es da parte inferior para a superior. Desta forma, o resultado da transformac¸a˜o anterior e´: (40)10 = (101000)2 Para transformar nu´meros decimais com d´ıgitos apo´s a v´ırgula em nu´meros na base bina´ria devemos proceder de duas maneiras. A parte inteira deste nu´mero deve ser transformada como citado anteriormente, atrave´s da aplicac¸a˜o de diviso˜es sucessivas. Para transformar os d´ıgitos decimais a direita da v´ırgula para bina´rio, deve-se multiplica´-los por 2. Do resultado, considera- se a parte a esquerda da v´ırgula como resultado parcial da transformac¸a˜o e deve-se proceder o processo de multiplicac¸a˜o da parte fraciona´ria ate´ que seja obtido o valor 0 apo´s a v´ırgula, ou ate´ verificar que o nu´mero na˜o pode ser armazenado de maneira exata. Seja o exemplo de transformar o nu´mero (40, 1875)10 para bina´rio. A transformac¸a˜o da parte inteira ja´ foi calculada, vejamos agora o ca´lculo da parte fraciona´ria: 0, 1875 0, 375 0.75 0.50 ∗2 ∗2 ∗2 ∗2 0, 3750 0, 75 1, 50 1, 00 Assim, (40, 1875)10 = (101000, 0011)2 Infelizmente, a necessidade de transformar nu´meros entre bases pode implicar na inserc¸a˜o de erros nume´ricos porque um nu´mero pode ter representac¸a˜o exata em uma base e na˜o ter representac¸a˜o exata em outra. Seja o exemplo do nu´mero (0, 1)10 que tem representac¸a˜o exata na base decimal. Veremos que na˜o e´ poss´ıvel representa´-lo de forma exata na base bina´ria: 0, 10 0, 20 0.40 0.80 0.60 0.20 0.40 ... ∗2 ∗2 ∗2 ∗2 ∗2 ∗2 ∗2 ... 0, 20 0, 40 0, 80 1, 60 1, 20 0, 40 0, 80 ... Na transformac¸a˜o realizada no exemplo, vemos que na˜oe´ poss´ıvel obter um resultado da multiplicac¸a˜o igual a zero e o processo de transformac¸a˜o entra em um ciclo infinito. Neste caso, o nu´mero (0, 1)10 sera´ representado de forma aproximada na base bina´ria com precisa˜o dependente do nu´mero de algarismos significativos definido. (0, 1)10 ' (0, 00011)2 4 Notac¸a˜o de Ponto Flutuante 4.1 Representac¸a˜o de Nu´meros em Ponto Flutuante Nos computadores e ma´quinas digitais em geral, para a realizac¸a˜o de operac¸o˜es, cada nu´mero e´ armazenado em uma a´rea de memo´ria chamada Palavra que tem tamanho limitado. A repre- sentac¸a˜o utilizada nas ma´quinas digitais modernas e´ a chamada Notac¸a˜o de Ponto Flutuante. 4 Nesta notac¸a˜o, o espac¸o reservado para armazenamento e´ dividido em treˆs partes: o sinal do nu´mero, a parte fraciona´ria tambe´m chamada de mantissa e uma a´rea para armazenar o expo- ente. Como o espac¸o de armazenamento e´ limitado, na˜o e´ poss´ıvel armazenar todos os nu´meros reais e sim intervalos discretos. Quanto maior for o espac¸o dispon´ıvel para armazenamento, ou seja, o tamanho da Palavra, maior sera´ a faixa e a precisa˜o dos nu´meros armazenados. Os computadores atuais utilizam base bina´ria com tamanho de palavra de 32 bits ou 64 bits. Baseado no padra˜o IEEE754 que define a representac¸a˜o com tamanho de palavra de 32 bits, chamado de precisa˜o simples, e com palavra de 64 bits chamado de precisa˜o dupla, a divisa˜o do tamanho da palavra e´ assim definido: Precisa˜o Simples: 32 bits ou 4 bytes • 1 bit e´ reservado para o sinal do nu´mero (positivo ou negativo); • 8 bits sa˜o utilizados para armazenar um nu´mero inteiro que e´ o expoente da base; • 23 bits sa˜o utilizados para a mantissa. Precisa˜o Dupla: 64 bits ou 8 bytes • 1 bit e´ reservado para o sinal do nu´mero (positivo ou negativo); • 11 bits sa˜o utilizados para armazenar um nu´mero inteiro que e´ o expoente da base; • 52 bits sa˜o utilizados para a mantissa. Enta˜o, na Notac¸a˜o de Ponto Flutuante, o nu´mero m pode ser assim representado: m = ±, d1d2d3...dt ∗ βe Onde: di′s : d´ıgitos da parte fraciona´ria, d1 6= 0, 0 ≤ di ≤ β − 1 β: base (em geral 2, 10 ou 16), t: nu´mero de d´ıgitos na mantissa. e: expoente inteiro. Utilizando a forma de representac¸a˜o normalizada, o primeiro d´ıgito d1 sera´ sempre diferente de zero. 4.2 Aritme´tica de Nu´meros em Ponto Flutuante Na aritme´tica de ponto flutuante, um sistema de numerac¸a˜o e´ representado por 4 nu´meros F(β,t,m,M). Nesta representac¸a˜o, β sera´ a base utilizada, t o tamanho ou nu´mero de d´ıgitos da mantissa, m o menor expoente poss´ıvel para a notac¸a˜o e M o maior expoente. Enta˜o, de- vido ao tamanho finito da Palavra em uma ma´quina, F(β,t,m,M) sera´ sempre um 5 subconjunto dos nu´meros reais. Vejamos os nu´meros representa´veis em um dado sistema F. Exemplo: Seja F(2,3,-1,2), quais os nu´meros na base decimal representa´veis neste sistema? A base utilizada e´ a bina´ria, enta˜o, os d´ıgitos da mantissa podera˜o ser 0 ou 1, sendo que na forma normalizada o primeiro d´ıgito da mantissa sera´ obrigatoriamente 1. Para a mantissa poderemos ter as seguintes variac¸o˜es: 0,100; 0,101; 0,110 e 0,111 Para o expoente, poderemos ter nu´meros variando de 2−1 ate´ 22. Assim, os nu´meros representa´veis nesses sistema sa˜o: O zero e´ representado em todos os sistemas. 0, 100 ∗ 2−1 = (1 ∗ 2−1 + 0 ∗ 2−2 + 0 ∗ 2−3) ∗ 1 2 = 1 2 ∗ 1 2 = 1 4 = 0, 25 0, 101 ∗ 2−1 = (1 ∗ 2−1 + 0 ∗ 2−2 + 1 ∗ 2−3) ∗ 1 2 = (1 2 + 1 8 ) ∗ 1 2 = 5 8 ∗ 1 2 = 5 16 = 0, 3125 0, 110 ∗ 2−1 = (1 ∗ 2−1 + 1 ∗ 2−2 + 0 ∗ 2−3) ∗ 1 2 = (1 2 + 1 4 ) ∗ 1 2 = 3 4 ∗ 1 2 = 3 8 = 0, 375 0, 111 ∗ 2−1 = (1 ∗ 2−1 + 1 ∗ 2−2 + 1 ∗ 2−3) ∗ 1 2 = (1 2 + 1 4 + 1 8 ) ∗ 1 2 = 7 8 ∗ 1 2 = 7 16 = 0, 4375 0, 100 ∗ 20 = 1 ∗ 2−1 + 0 ∗ 2−2 + 0 ∗ 2−3 = 1 2 = 1 4 = 0, 5 0, 101 ∗ 20 = 1 ∗ 2−1 + 0 ∗ 2−2 + 1 ∗ 2−3 = 1 2 + 1 8 ) ∗ 1 2 = 5 8 = 0, 625 0, 110 ∗ 20 = 1 ∗ 2−1 + 1 ∗ 2−2 + 0 ∗ 2−3 = 1 2 + 1 4 = 3 4 = 0, 750 0, 111 ∗ 20 = 1 ∗ 2−1 + 1 ∗ 2−2 + 1 ∗ 2−3 = 1 2 + 1 4 + 1 8 = 7 8 = 0, 875 0, 100 ∗ 21 = (1 ∗ 2−1 + 0 ∗ 2−2 + 0 ∗ 2−3) ∗ 2 = 1 2 ∗ 2 = 1 0, 101 ∗ 21 = (1 ∗ 2−1 + 0 ∗ 2−2 + 1 ∗ 2−3) ∗ 2 = (1 2 + 1 8 ) ∗ 2 = 5 8 ∗ 2 = 5 4 = 1, 25 0, 110 ∗ 21 = (1 ∗ 2−1 + 1 ∗ 2−2 + 0 ∗ 2−3) ∗ 2 = (1 2 + 1 4 ) ∗ 2 = 3 4 ∗ 2 = 3 2 = 1, 5 0, 111 ∗ 21 = (1 ∗ 2−1 + 1 ∗ 2−2 + 1 ∗ 2−3) ∗ 2 = (1 2 + 1 4 + 1 8 ) ∗ 2 = 7 8 ∗ 2 = 7 4 = 1, 75 0, 100 ∗ 22 = (1 ∗ 2−1 + 0 ∗ 2−2 + 0 ∗ 2−3) ∗ 22 = 1 2 ∗ 4 = 2 0, 101 ∗ 22 = (1 ∗ 2−1 + 0 ∗ 2−2 + 1 ∗ 2−3) ∗ 22 = (1 2 + 1 8 ) ∗ 4 = 5 8 ∗ 4 = 5 2 = 2, 5 0, 110 ∗ 22 = (1 ∗ 2−1 + 1 ∗ 2−2 + 0 ∗ 2−3) ∗ 22 = (1 2 + 1 4 ) ∗ 4 = 3 4 ∗ 4 = 3, 0 0, 111 ∗ 22 = (1 ∗ 2−1 + 1 ∗ 2−2 + 1 ∗ 2−3) ∗ 22 = (1 2 + 1 4 + 1 8 ) ∗ 4 = 7 8 ∗ 4 = 7 2 = 3, 5 Os nu´meros representa´veis neste sistema sa˜o: -3,5; -3,0; -2,5; -2; -1,75; -1,5; -1,25; -1; -0,875; -0,750; -0,625; -0,5; -0,4375; -0,375; -0,3125; -0,25; 0 ;0,25; 0,3125; 0,375; 0,4375; 0,5; 0,625; 0,750; 0,875; 1; 1,25; 1,5; 1,75; 2; 2,5; 3,0; 3,5 Vemos que para o sistema F(2,3,-1,2) podemos representar 33 nu´meros e que na˜o ha´ nu´meros representa´veis entre, por exemplo, [1; 1,25] ou entre [3.0; 3.5]. Uma forma de determinar a quantidade de nu´meros representa´veis e´ fazer a seguinte ana´lise. Neste sistema temos treˆs 6 d´ıgitos na mantissa sendo que o primeiro d´ıgito e´ obrigatoriamente 1, para os outros dois d´ıgitos temos 2 possibilidades para d2 e 2 possibilidades para d3. Para o expoente temos 4 possibilidades ([-1,2]). Temos enta˜o 2 * 2 * 4 possibilidades o que implica em 16 nu´meros. Como o zero e´ representa´vel em qualquer sistema e tambe´m temos os nu´meros negativos, o total de nu´meros representa´veis sera´: 2 * 16 + 1 = 33 nu´meros. Podemos tambe´m fazer uso da seguinte fo´rmula para calcular o total de nu´meros em um sistema: N = 2 ∗ (β − 1) ∗ βt−1 ∗ (M −m+ 1) + 1 Onde: N = quantidade de nu´meros representa´veis em F; A primeira multiplicac¸a˜o por 2 se deve a possibilidade de representar nu´meros positivos e negativos; O acre´scimo de 1 no final e´ devido a representac¸a˜o do nu´mero 0 (zero) Com relac¸a˜o a representac¸a˜o dos nu´meros na notac¸a˜o de ponto flutuante, quanto maior o nu´mero de d´ıgitos utilizados na mantissa, maior sera´ a precisa˜o dos nu´meros representa´veis e menor sera´ o intervalo entre dois nu´meros pertencentes a este sistema. Para o expoente, quanto maior o nu´mero de bits dispon´ıveis nesta representac¸a˜o maior sera´ os limites dos nu´meros. Atenc¸a˜o: Em nosso estudo, alguns detalhes sobre a representac¸a˜o dos nu´meros definidos pelo padra˜o IEEE 754 na˜o esta˜o sendo considerados. Alguns destes pontos sa˜o: a forma de armazenar o expoente de um nu´mero considerando o sinal e considerar que o primeiro d´ıgito dos nu´meros normalizados (1), na˜o precisa ser armazenado. 4.3 Erros na representac¸a˜o dos Nu´meros Enta˜o, devido a representac¸a˜o de nu´meros do formato de ponto flutuante, pode ocorrer dois tipos de erros: um relacionado ao nu´mero de bits dispon´ıveis para representar o expoente e outro erro relacionado a tamanho da mantissa. Quanto ao limite do expoente, sempre que uma operac¸a˜o aritme´tica produz um nu´mero com expoente maior que o expoente ma´ximo M, ocorre um erro no armazenamento do nu´mero e e´ gerada uma excec¸a˜o chamada overflow. De forma semelhante, operac¸o˜es que resultem em expoente menores que o expoente mı´nimo m geram uma excec¸a˜o chamada underflow. No caso do exemplo apresentado na Figura 1, pode-se observar que para operac¸o˜es que gerem valores entre o intervalo (−1 4 , 1 4 ) ocorre underflowe em valores menores que −3 e maiores que 3 ira´ ocorrer um overflow. Quanto a erros relacionados com o tamanho da mantissa, mesmo o melhor computador dispon´ıvel na˜o consegue armazenar em um intervalo, todo o conjunto de valores reais poss´ıveis. Na pra´tica sa˜o armazenados apenas pontos discretos e a distaˆncia entre estes pontos esta´ diretamente relacionada com o nu´mero de bits da mantissa. O seguinte exemplo apresenta um erro devido a limitac¸a˜o do tamanho da mantissa em um dado sistema de ponto flutuante. Seja f(x) uma func¸a˜o cont´ınua real definida no intervalo [a,b], a < b, e sejam f(a) < 0 e f(b) > 0. Enta˜o, pelo Teorema do Valor Me´dio, existe um x, a < x < b, tal que f(x) = 0. Seja 7 Figura 1: Regia˜o de Underflow e Overflow f(x) = x3 − 3, determinar x tal que f(x) = 0. Soluc¸a˜o: Para a func¸a˜o dada, consideremos t = 10 e β = 10. Obtemos enta˜o: f(0, 1442249570 ∗ 101) = −0, 2 ∗ 10−8 f(0, 1442249571 ∗ 101) = 0, 4 ∗ 10−8 Observe que entre os dois valores de x, na˜o existe nenhum nu´mero que possa ser representado no sistema e que a func¸a˜o muda de sinal nos extremos deste intervalo. Assim, esta ma´quina na˜o possui o nu´mero x tal que f(x) = 0 e obtemos apenas um valor aproximado para o x. Realizados em um computador, os ca´lculos das expresso˜es a seguir na˜o resultam em zero, voceˆ saberia descrever a raza˜o? (resposta ≈ 0, 1 ∗ 10−15) 1) 1− 3 ∗ (4/3− 3) 2) sen(pi) Importante: Dois aspectos devem ser destacados nesse momento: • A representac¸a˜o dos nu´meros em sistemas digitais, diferentemente do que acontece no conjunto dos nu´meros reais, ocorre atrave´s de valores discretos. Quanto menor o nu´meros de bits dispon´ıveis para representar a mantissa, maior sera´ o intervalo entre os nu´meros representa´veis. O Matlab tem um func¸a˜o chamada eps que retorna qual a distaˆncia entre o valor passado para a func¸a˜o e o pro´ximo nu´mero representa´vel. • A restric¸a˜o dos bits dispon´ıveis para representar o expoente, limitam a magnitude dos nu´meros representa´veis. 4.4 Operac¸o˜es Aritme´ticas em Ponto Flutuante Seja uma ma´quina onde sa˜o realizadas uma se´rie de operac¸o˜es aritme´ticas. Apo´s cada operac¸a˜o, o resultado e´ colocado no formato do sistema, aplicando o procedimento de arredon- damento ou de truncamento. Se a quantidade de d´ıgitos do nu´mero for maior que o tamanho da mantissa. Por este motivo, as operac¸o˜es aritme´ticas nem sempre sa˜o associativas e nem distributivas. ( Associativa: (a + b) + c = a + (b + c). Distributiva: a * ( b + c) = a * b + a * c). 8 Lembrete: Para realizar operac¸o˜es de adic¸a˜o ou subtrac¸a˜o, os nu´meros devem ser multipli- cados por poteˆncias de mesmo expoente. Como exemplo, seja o sistema F(10,3,-5,5), vejamos o que ocorre nas seguintes operac¸o˜es: a) (11, 4 + 3, 18) + 5, 05 Temos que: (0, 114 ∗ 102 + 0, 0318 ∗ 102) + 0, 0505 ∗ 102 0, 146 ∗ 102 + 0, 0505 ∗ 102 = 0, 197 ∗ 102 b) 11, 4 + (3, 18 + 5, 05) Temos que: 0, 114 ∗ 102 + (0, 0318 ∗ 102 + 0, 0505 ∗ 102) 0, 114 ∗ 102 + 0, 0823 ∗ 102 = 0, 196 ∗ 102 c) 3, 18 ∗ (5, 05 + 11, 4) Temos que: 0, 318 ∗ 101 ∗ (0, 0505 ∗ 102 + 0, 114 ∗ 102) 0, 318 ∗ 101 ∗ 0, 165 ∗ 102 = 0, 525 ∗ 102 d)3, 18 ∗ 5, 05 + 3, 18 ∗ 11, 4 Temos que: 0, 318 ∗ 101∗, 505 ∗ 101 + 0, 318 ∗ 101 ∗ 0, 114 ∗ 102 0, 161 ∗ 102 + 0, 363 ∗ 102 = 0, 524 ∗ 102 O resultado das expresso˜es a) e b), e das expresso˜es c) e d) deveriam ser iguais mas, devido o arredondamento apo´s cada operac¸a˜o, apresentaram diferenc¸as. Algoritmo da adic¸a˜o/subtrac¸a˜o em ponto flutuante 1. Se na˜o estiver formatado, escreva os nu´meros no formato de ponto flutuante. 2. Compare o expoente dos dois nu´meros. Se forem diferentes, desloque o nu´mero com menor expoente a` direita ate´ que seu expoente se iguale ao maior nu´mero. 3. Some/subtraia as mantissas. 4. Normalize a soma, deslocando a` direita e incrementando o expoente ou deslocando a` esquerda e decrementando o expoente. 5. Teste se ocorre overflow ou underflow. 6. Se sim, gera excec¸a˜o. 9 7. Se na˜o, arredonde ou fac¸a o truncamento da mantissa para o nu´mero de bits corretos. 8. Verifica se o resultado esta´ normalizado. 9. Se Sim. Fim 10. Se Na˜o, retorna ao passo 4 Algoritmo da multiplicac¸a˜o/divisa˜o em ponto flutuante 1. Se na˜o estiver formatado, escreva os nu´meros no formato de ponto flutuante. 2. Somar os expoentes das duas poteˆncias 3. Multiplique/divida as mantissas. 4. Normalize o produto se necessa´rio. 5. Teste se ocorre overflow ou underflow. 6. Caso sim, gera excec¸a˜o. 7. Caso na˜o, escreva a mantissa com o nu´mero de bits apropriado. 8. Verificar se resultado esta´ normalizado. 9. Na˜o, retorna ao passo 4. 10. sim, fac¸a o sinal do produto positivo se ambos os sinais dos operandos originais sa˜o os mesmos, caso contra´rio, sinal e´ negativo, Fim 5 Algarismos Significativos Os Algarismos Significativos de um nu´mero sa˜o aqueles que podem ser usados com confianc¸a [1] e que correspondem ao nu´mero de algarismo corretos mais um algarismo estimado. Por exemplo, seja o veloc´ımetro analo´gico de um carro que tem trac¸os marcando os Km. Qual seria a leitura de velocidade se o ponteiro estivesse entre os trac¸os que representam 61 Km/h e 62 Km/h? Dependendo da posic¸a˜o do ponteiro entre os dois trac¸os, uma pessoa poderia informar que a velocidade e´ 61,7 Km/h e outra 61,8 Km/h. Nesta leitura ter´ıamos treˆs algarismos significativos. Convenciona-se tomar o algarismo estimado como a metade da menor divisa˜o da escala do aparelho utilizado. Portanto, a leitura da velocidade segundo esta convenc¸a˜o seria 61,5 Km/h. Para as definic¸o˜es de ca´lculo nume´rico, seja β a base de um sistema de nu´meros de ponto flutuante. Dı´gitos Significativos de um nu´mero x sa˜o todos os algarismos de 0 a β − 1, desde que x esteja representado na forma normalizada. Algumas definic¸o˜es sobre algarismos significativos: 10 • Os algarismos significativos de um nu´mero sa˜o os d´ıgitos diferentes de zero, contados a partir da esquerda ate´ o u´ltimo d´ıgito diferente de zero a` direita, caso na˜o haja v´ırgula, ou ate´ o u´ltimo d´ıgito, zero ou na˜o, caso haja uma v´ırgula decimal. Ex.: 3, 2 ∗ 103 e 3, 200 ∗ 103 tem 2 e 4 algarismos significativos, respectivamente. • Os d´ıgitos diferentes de zero sa˜o todos significativos. Ex.: 7, 3; 32 e 210 possuem 2 algarismos significativos. • Os zeros entre d´ıgitos diferentes de zero sa˜o significativos. Ex: 303 e 1, 03 possuem 3 algarismos significativos. • Se existir uma v´ırgula, todos os zeros a` direita da v´ırgula decimal sa˜o significativos. Ex: 1, 000 e 33, 30 possuem 4 algarismos significativos. Os me´todos nume´ricos fornecem resultados aproximados, sendo necessa´rio enta˜o, desenvol- ver crite´rios para especificar quanta confianc¸a se tem no resultado aproximado. Isto e´ realizado atrave´s da definic¸a˜o de algarismos significativos. Por exemplo, pode-se decidir que uma apro- ximac¸a˜o e´ aceita´vel se ela for correta ate´ 4 algarismos significativos. 6 Ana´lise de Erros O objetivo desta sec¸a˜o e´ descrever me´todos que permitam reduzir ou determinar limites para os erros nume´ricos. Nenhum resultado cient´ıfico tem valor pra´tico se na˜o houver um controle sobre os erros envolvidos. A ana´lise dos erros e´ parte fundamental de um processo de modelagem. 6.1 Erros Absolutos e Relativos Erro absoluto e´ a diferenc¸a entre o valor exato de um nu´mero x e seu valor aproximado x. EAx = x− x. Em geral, na˜o se conhece o valor exato x, o que impossibilita o ca´lculo do erro absoluto. Nestes casos, avalia-se um limitante superior ou uma aproximac¸a˜o para o mo´dulo do erro. Por exemplo, sabemos que o valor de pi ∈ (3, 14; 3, 15). Considera-se enta˜o o limitante para o erro absoluto como sendo |EAx| < 0,01. Ao longo da disciplina, sera˜o apresentadas outras formas de verificac¸a˜o para erros aproximados e limitantes para erros. O erro absoluto na˜o permite uma avaliac¸a˜o da precisa˜o entre dois resultados de forma correta porque na˜o leva em considerac¸a˜o a grandeza destes nu´meros. Por exemplo, se for identificado que o comprimento de uma sala de aula tem um limitante superior de erro da ordem de 1mm, considera-se que a sala tem medidas precisas e que este erro na˜o altera a sua qualidade. Pore´m, se considerarmos o mesmo limitante de 1mm para a confecc¸a˜o de um eixo de um sistema de transmissa˜o de um automo´vel. Provavelmente, um eixo com erro de 1mm em seu diaˆmetro na˜o seria montado com sucesso neste sistema de transmissa˜o. 11 O erro relativo leva em considerac¸a˜o as dimenso˜es dos valores em ana´lise e pode ser calculado atrave´s da expressa˜o: ERx = EAx x = x− x x Exemplo: Sejam x = 100, x = 100, 1, y = 0, 004, x = 0, 006. Qual nu´mero e´ representado com maior precisa˜o pela sua aproximac¸a˜o? Para determinar a resposta e´ necessa´rio calcular os erros relativos de x e y. ERx = 100− 100, 1100, 1 = 0, 999 ∗ 10−3 ERy = 0, 004− 0, 0060, 006 = 0, 333 ∗ 100 Logo, verifica-se que o nu´mero x e´ representado com melhor precisa˜o. 6.2 Erros de Cancelamento Ocorrem durante a subtrac¸a˜o de dois nu´meros com valores pro´ximos. Nesta operac¸a˜o, se subtrairmos estes dois nu´mero na forma normalizada, havera´ no resultado alguns zeros na˜o significativos. Enta˜o sera´ necessa´rio normalizar o resultado e preencher a` direita com zeros que sa˜o necessa´rios para a normalizac¸a˜o. Veja o exemplo da subtrac¸a˜o dos nu´meros √ 9876−√9875 em um sistema F(10,10,-10,10). √ 9876−√9875 = 0, 9937806599 ∗ 102 − 0, 9937303457 ∗ 102 = 0, 0000503142 ∗ 102 Normalizando o resultado temos que: √ 9876−√9875 = 0, 5031420000 ∗ 10−2. Na pra´tica, os quatro zeros no final do nu´mero na˜o teˆm significado e perde-se quatro d´ıgitos de precisa˜o na mantissa. O erro de cancelamento pode ser contornado utilizando manipulac¸o˜es alge´bricas de forma a evitar a subtrac¸a˜o destes nu´meros. Podemos reescrever a diferenc¸a desta forma:√ x−√y = x− y√ x+ √ y Neste caso a diferenc¸a torna-se: √ 9876−√9875 = 1√ 9876 + √ 9875 = 0, 5031418679 ∗ 10−2 Que tem todos os d´ıgitos da mantissa preenchidos. Outro exemplo: Resolver a equac¸a˜o x2 − 1634 ∗ x+ 2 = 0 Utilizando a fo´rmula de Bhaskara temos: x = −b± √ b2 − 4ac 2a 12 Para a equac¸a˜o, x = 1634± √ 16342 − 4 ∗ 2 2 = 1634± 1633, 99755 2 Para evitar o erro de cancelamento no ca´lculo da diferenc¸a, basta lembrarmos que o produto das ra´ızes e´ igual ao termo independente do polinoˆmio. Ou, x1 ∗ x2 = 2 A segunda raiz sera´ calculada por x2 = 2 x1 x1 = 0, 1633998776 ∗ 103 e x2 = 0, 1223991125 ∗ 10−2 Nem sempre havera´ uma maneira trivial de resolver o problema de cancelamento. 6.3 Erros de Arredondamento e Truncamento em um Sistema Ponto Flutuante A representac¸a˜o de um nu´mero em uma ma´quina depende do tamanho da palavra ou da quantidade de bits dispon´ıveis para o seu armazenamento. De acordo com o tamanho da palavra, sera´ definido o nu´mero t de bits da mantissa e do expoente. Apo´s uma operac¸a˜o realizada em ponto flutuante, o resultado e´ normalizado e pode ser necessa´rio arrendondar ou truncar este nu´mero. O erro relativo gerado por este truncamento ou arrendondamento no resultado sera´ definido nesta sec¸a˜o. Seja um sistema que opera em aritme´tica de ponto flutuante com t d´ıgitos na mantissa e β = 10 e seja o nu´mero x escrito na forma: x = fx ∗ 10e + gx ∗ 10e−t, onde 0, 1 ≤ fx < 1 e 0 ≤ gx < 1 Por exemplo, se t = 4 e x = 234, 57, enta˜o x = 0, 2345 ∗ 103 + 0, 7 ∗ 10−1 Assim, fx = 0, 2345 e gx = 0, 7 Verifica-se que no exemplo proposto, o valor de gx na˜o pode ser incorporado a mantissa de x. Pode-se adotar dois crite´rios na definic¸a˜o dos nu´meros em casos como o do exemplo. Pode-se realizar o truncamento ou o arredondamento dos d´ıgitos restantes na mantissa. No truncamento, gx ∗ 10e−t e´ desprezado e x = fx ∗ 10e. Assim, obtemos o erro absoluto devido ao truncamento: |EAx| = |x− x| = |gx| ∗ 10e−t < 10e−t, visto que gx < 1 Da mesma forma, podemos calcular o erro relativo: |ERx| = |EAx||x| = |gx| ∗ 10e−t |fx| ∗ 10e < 10e−t 0,1∗10e = 10 −t+1, visto que 0, 1 e´ o menor valor poss´ıvel para fx, ou, |ERx| < 10−t+1 13 No arredondamento, fx e´ modificado, dependendo do valor de gx. No arredondamento sime´trico que e´ a forma mais utilizado: x = fx ∗ 10 e se |gx| < 12 fx ∗ 10e + 10e−t se |gx| ≥ 12 Enta˜o, despreza-se gx se |gx| < 12, caso contra´rio, soma-se 1 ao u´ltimo d´ıgito de fx. Para |gx| < 12 e |EAx| < 12 ∗ 10e−t, o erro relativo e´ calculado por: |ERx| = |EAx|x = |gx| ∗ 10e−t |fx| ∗ 10e < 0, 5 ∗ 10e−t 0, 1 ∗ 10e = 1 2 ∗ 10−t+1 Ou seja, |ERx| < 12 ∗ 10−t+1 Se |gx| ≥ 12, teremos: |EAx| = |x− x| = |(fx ∗ 10e + gx ∗ 10e−t)− (fx ∗ 10e + 10e−t)| = = |gx ∗ 10e−t − 10e−t| = |gx − 1| ∗ 10e−t ≤ 12 ∗ 10e−t Ou seja, |EAx| ≤ 12 ∗ 10e−t |ERx| = |EAx|x ≤ 1 2 ∗ 10e−t |fx ∗ 10e + 10e−t| < 1 2 ∗ 10e−t |fx| ∗ 10e ≤ 1 2 ∗ 10e−t 0, 1 ∗ 10e = 1 2 ∗ 10−t+1 Ou seja, |ERx| ≤ 12 ∗ 10−t+1 Enta˜o, em qualquer caso para o arredondamento, teremos: |EAx| ≤ 12 ∗ 10e−t e |ERx| ≤ 1 2 ∗ 10−t+1, e os erros gerados no armazenamento de um resultado em ponto flutuante sa˜o definidos por: Arredondamento Truncamento |EAx| ≤ 12 ∗ 10e−t < 10e−t |ERx| ≤ 12 ∗ 10−t+1 < 10−t+1 6.4 Propagac¸a˜o dos Erros O erro total em uma operac¸a˜o e´ composto pelo erro das parcelas mais o erro no resultado. O ca´lculo da estimativa do erro no resultado foi definido na sec¸a˜o anterior. A seguir sera˜o definidas fo´rmulas para o ca´lculo dos erros absolutos e relativos nas operac¸o˜es com erros nas parcelas. Supomos que o erro final e´ arrendondado. Seja x e y tais que: x = x¯+ EAx e y = y¯ + EAy 14 Adic¸a˜o: x+ y = (x¯+ EAx) + (y¯ + EAy) = (x¯+ y¯) + (EAx + EAy) O erro absoluto da soma x+y, denotado por EAx+y e´ a soma dos erros absoluto das parcelas. EAx+y = EAx + EAy O erro relativo da soma, ERx+y e´ assim definido: ERx+y = EAx+y x¯+ y¯ = EAx x¯ ∗ x¯x¯+ y¯ + EAy y¯ ∗ y¯x¯+ y¯ ERx+y = ERx ∗ x¯x¯+ y¯ + ERy ∗ y¯ x¯+ y¯ Pela expressa˜o do ca´lculo do erro na soma, verifica-se que se os dois nu´meros sa˜o armaze- nados de maneira exata, o resultado do erro sera´ zero. De forma ana´loga, o ca´lculo do erro na diferenc¸a entre dois nu´meros e´ dado por: ERx−y = ERx ∗ x¯x¯− y¯ − ERy ∗ y¯ x¯− y¯ Na multiplicac¸a˜o: x ∗ y = (x¯+ EAx) ∗ (y¯ + EAy) = x¯ ∗ y¯ + x¯ ∗ EAy + y¯ ∗ EAx + EAx ∗ EAy Considerando a u´ltima parcela, EAx ∗ EAy como um nu´mero pequeno, fazemos: EAx ≈ x¯ ∗ EAy + y¯ ∗ EAx O erro relativo do produto pode ser calculado por: ERx∗y = x¯ ∗ EAy + y¯ ∗ EAx x¯ ∗ y¯ = EAxx¯ + EAy y¯ = ERx + ERy E finalmente, para a divisa˜o de xy x y = x¯+ EAx y¯ + EAy = x¯+ EAxy¯ ∗ 1 1 + EAy y¯ Representando 1 1 + EAy y¯ em termos de uma se´rie infinita: 1 1 + EAy y¯ = 1− EAyy + ( EAy y )2 − ( EAy y )3 + ... e desprezando os termos da se´rie com expoente maior que 1, podemos escrever a divisa˜o como: x y ≈ x¯+ EAxy¯ ∗ ( 1− EAyy¯ ) = x¯y¯ + EAx y¯ − x¯ ∗ EAy y¯2 − EAx ∗ EAy y¯2 15 Enta˜o x y ≈ x¯y¯ + EAxy¯ − x¯ ∗ EAy y¯2 Assim, EAx/y ≈ EAxy¯ − x¯ ∗ EAy y¯2 = y¯ ∗ EAx − x¯ ∗ EAy y¯2 e ERx/y ≈ ( y¯ ∗ EAx − x¯ ∗ EAy y¯2 ) /x¯y¯ = EAx x¯ − EAy y¯ = ERx − ERy A ana´lise completa da propagac¸a˜o dos erro e´ realizada considerando a parcela de erro que ocorre nas operac¸o˜es e pela parcela de erro do resultado descrita na sec¸a˜o anterior. Vejamos um exemplopara o ca´lculo de erros absolutos, relativos e erros totais de operac¸o˜es aritme´ticas. Sejam os nu´meros x = 17534, y = 21178 e z = 75904, que devem ser armazenados em um sistema com as seguintes caracter´ısticas F(10,4,-6,6). a) Calcule os erros absolutos e relativos EAx = |x− x¯| = |0, 17534 ∗ 105 − 0, 1753 ∗ 105| = 0, 4000 ∗ 101 EAy = |y − y¯| = |0, 21178 ∗ 105 − 0, 2118 ∗ 105| = 0, 2000 ∗ 101 EAz = |y − y¯| = |0, 75904 ∗ 105 − 0, 7590 ∗ 105| = 0, 4000 ∗ 101 ERx = |x− x¯|/|x¯| = 0, 4000 ∗ 101/0, 1753 ∗ 105 = 0, 2282 ∗ 10−3 ERy = |y − y¯|/|y¯| = 0, 2000 ∗ 101/0, 2118 ∗ 105 = 0, 9447 ∗ 10−4 ERz = |z − z¯|/|z¯| = 0, 4000 ∗ 101/0, 7590 ∗ 105 = 0, 5270 ∗ 10−4 Neste exemplo, os valores de erros esta˜o no formato do sistema mas isto na˜o e´ estritamente necessa´rio. b) Calcular o valor da expressa˜o (x+ y)/z e o erro relativo final da operac¸a˜o. x+ y = (0, 1753 + 0, 2118) ∗ 105 = 0, 3871 ∗ 105 O erro relativo da soma mais o erro do resultado e´ definido por: ERx+y = ( ERx ∗ x¯x¯+ y¯ + ERy ∗ y¯ x¯+ y¯ ) + 12 ∗ 10−t+1 = ( 0, 2282 ∗ 10−3 ∗ 0, 1753 ∗ 10 5 (0, 1753 + 0, 2118) ∗ 105 + 0, 9447 ∗ 10 −4 ∗ 0, 2118 ∗ 10 5 (0, 1753 + 0, 2118) ∗ 105 ) + 1 2 ∗ 10−3 ERx+y = ( 0, 2282 ∗ 10−3 ∗ 0, 1753 ∗ 10 5 0, 3871 ∗ 105 + 0, 9447 ∗ 10 −4 ∗ 0, 2118 ∗ 10 5 0, 3871 ∗ 105 ) + 0, 0005 16 ERx+y = (0, 1033 ∗ 10−3 + 0, 5283 ∗ 10−4) + 0, 0005 = (0, 1561 + 0, 5) ∗ 10−3 ERx+y = 0, 6561 ∗ 10−3 O resultado final da operac¸a˜o e´ dado por: (x+ y)/z = (0, 3871 ∗ 105)/(0, 7590 ∗ 105) = 0, 5100 ∗ 100 O ca´lculo do erro relativo final de toda expressa˜o e´ calculado da seguinte forma: ER(x+y)/z = ERx+y − ERz + 12 ∗ 10−t+1 ER(x+y)/z = 0, 6561 ∗ 10−3 − 0, 5270 ∗ 10−4 + 0, 5 ∗ 10−3 = 0, 1103 ∗ 10−2 7 Considerac¸o˜es Finais O objetivo deste documento foi apenas introduzir alguns aspectos sobre erros nume´ricos. E´ poss´ıvel verificar que mesmo com o avanc¸o na tecnologia de construc¸a˜o de computadores e ma´quinas digitais, os resultados finais podem sempre ser influenciados por erros como os de arredondamento e restric¸o˜es do armazenamento de nu´meros. Como leitura adicional recomenda- se realizar uma busca na Internet por falhas e acidentes causados por erros nume´ricos. Sugesta˜o de pesquisa:disasters caused by numerical errors. Refereˆncias [1] S. C. Chapra and R. P Canale. Me´todos Nume´ricos para Engenharia. Pearson, 2008. [2] N. B. Franco. Ca´lculo Nume´rico. Pearson, 2006. [3] M. A. G . Ruggiero and V. L. R. Lopes. Ca´lculo Nume´rico - Aspectos Teo´ricos e Computacionais. Pearson, 2006. 17 Introdução Representação dos Números Decomposição de números Conversão de números entre bases Binário para decimal Decimal para binário Notação de Ponto Flutuante Representação de Números em Ponto Flutuante Aritmética de Números em Ponto Flutuante Erros na representação dos Números Operações Aritméticas em Ponto Flutuante Algarismos Significativos Análise de Erros Erros Absolutos e Relativos Erros de Cancelamento Erros de Arredondamento e Truncamento em um Sistema Ponto Flutuante Propagação dos Erros Considerações Finais Referências
Compartilhar