Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 UNIVERSIDADE FEDERAL DA GRANDE DOURADOS FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA Profª.: Dra. Selma Helena Marchiori Hashimoto Aritmética Computacional e Erro de Arredondamento 1. Introdução O Cálculo Numérico ou Análise Numérica é um conjunto de métodos usados para se obter a solução de problemas matemáticos de forma aproximada. Esses métodos se aplicam principalmente a problemas que não apresentam uma solução exata. Ao resolver um problema matemático numericamente, o mais comum é a utilização um pacote computacional. Porém, é preciso ter conhecimento de métodos numéricos, pois será necessário tomar algumas decisões: Pela utilização ou não de um método numérico; Escolher o método a ser utilizado, o mais adequado para o problema, sabendo quais vantagens e quais limitações de cada método; Saber avaliar a qualidade da solução obtida. Para isso, é necessário saber como determinado método é aplicado. 2. Representação Numérica Para calcular o valor da expressão 12 , precisa-se escrever o número 2 de alguma outra forma, senão não é possível realizar essa operação. Uma solução é escrevê-lo na base decimal (base mais usada no dia a dia), o valor de 2 na base decimal pode ser representado por 1,41 ou 1,4142 ou ainda 1,41421356237, além de outras. A diferença entre essas várias formas de representar 2 é a quantidade de algarismos significativos usados em cada representação. Assim a expressão 12 será igual 0.41 ou 0.4142 ou ainda 0.41421356237, conforme o número de algarismos significativos adotados na representação. Isto mostra que o conjunto dos números representáveis em qualquer máquina digital, calculadora ou computador, é finito, ou seja, não é possível representar em uma máquina todos os números de um dado intervalo [a, b]. A implicação imediata desse fato é que o 2 resultado de uma simples operação aritmética pode conter erros, os quais serão discutidos mais a frente. Inicialmente, têm-se como os números são representados num computador. Para tanto, deve-se entender que um número pode ser representado em várias bases, um exemplo é a base binária, ou seja, usando o número 2 como base ao invés do número 10. Como na base decimal existem 10 algarismos diferentes (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), na base binária existem somente 2 números: 0 e 1 (a base binária é muito usada porque as máquinas utilizam-se de sinais elétricos, sendo o 0 correspondente a ausência de sinal e o número 1 a presença do sinal elétrico). A princípio, toda vez que se escreve um número, dever-se-ia mencionar a base numérica a qual esta se referindo. Obviamente, isso não se faz necessário na prática, pois sempre se representa os números na base decimal, portanto sabe-se exatamente o seu significado. Representação de um número inteiro Essa ideia que está por trás da representação dos números em bases numéricas é utilizada para representar números no computador. Em princípio, a representação de um número inteiro no computador não apresenta nenhuma dificuldade. Qualquer computador trabalha internamente com uma base fixa 𝛽, em que 𝛽 é um inteiro ≥ 2, e é escolhido como uma potência de 2. Assim, dado um número inteiro 𝑛 ≠ 0, ele possui uma única representação: 𝑛 = ±(𝑛−𝑘𝑛−𝑘+1 … 𝑛−1𝑛0)𝛽 = 𝑛0𝛽 0 + 𝑛−1𝛽 1 + ⋯ + 𝑛−𝑘𝛽 𝑘 Em que os 𝑛𝑖, 𝑖 = 0, −1, −2, … , −𝑘 são inteiros satisfazendo 0 ≤ 𝑛𝑖 < 𝛽 e 𝑛−𝑘 ≠ 0 Exemplos: a) Quando se escreve o número 1532, o que realmente quer se dizer? Esse número está na base 10 representa uma quantidade equivalente a 11000 + 5100 + 310 + 2 ou 1103 + 5102 + 3101 + 2100. Logo (1532)10 = 2 × 10 0 + 3 × 101 + 5 × 102 + 1 × 103 E é armazenado como +(𝑛−3𝑛−2𝑛−1𝑛0)10 Essa é a chamada representação posicional de números. 3 b) Na base binária, o mecanismo é o mesmo, porém, ao invés de potências de 10, utiliza-se potências de 2. Portanto, um número binário como 1011 (base binária só existem os algarismos 0 e 1) significa (1011)2 = 12 3 + 022 + 121 + 120 Que na base 10 seria 8+2+1=11. Ou seja, (1011)2 = (11)10 Representação de um Número Real A representação de um número real no computador pode ser feita de duas maneiras: a) Representação de ponto fixo Este foi o sistema usado, no passado, em muitos computadores. Assim, dado um número real, 𝑥 ≠ 0, ele será representado em ponto fixo por: 𝑥 = ± ∑ 𝑥𝑖𝛽 −𝑖 𝑛 𝑖=𝑘 Em que k e n são inteiros satisfazendo 𝑘 < 𝑛 e, usualmente, 𝑘 ≤ 𝑛 e 𝑛 > 0, 𝑥𝑖 são inteiros satisfazendo 0 ≤ 𝑥𝑖 < 𝛽 Exemplos: O número 1997,16, na base 10, é representado por: (1997,16)10 = + ∑ 𝑥𝑖𝛽 −𝑖 2 𝑖=−3 = 1 × 103 + 9 × 102 + 9 × 101 + 7 × 100 + 1 × 10−1 + 6 × 10−2 b) Representação de ponto flutuante Esta representação é mais flexível que a representação em ponto fixo, é universalmente utilizada nos dias atuais. Dado um número real 𝑥 ≠ 0, ele será representado em ponto flutuante por: 𝑥 = ±𝑑 × 𝛽𝑒 em que 𝛽 é a base do sistema de numeração, d é a mantissa e 𝑒 é o expoente. A mantissa é um número em ponto fixo, isto é: 𝑑 = ± ∑ 𝑑𝑖𝛽 −𝑖 𝑛 𝑖=𝑘 4 Em que: d é uma fração na base 𝛽 𝑘 = 1 (frequentemente), 0 ≤ 𝑑𝑖 < 𝛽, 𝑖 = 1, 2 , … , 𝑡 com t a quantidade de dígitos significativos da mantissa ou precisão do sistema, e é um expoente que varia em um intervalo dado pelos limites da máquina utilizada (𝑚 ≤ 𝑒 ≤ 𝑀). Observações: 1. 𝑑1 ≠ 0 caracteriza o sistema de números em ponto flutuante normalizado; 2. O número zero pertence a qualquer sistema e é representado com mantissa igual a zero e 𝑒 = 𝑚. 3. Esse tipo de representação é chamada de ponto flutuante pois o ponto da fração “flutua” conforme o número a ser representado e sua posição é expressa pelo expoente e. Um sistema de números em ponto flutuante normalizado, na base 𝛽, com t dígitos significativos e com limites dos expoentes m e M, tem a seguinte notação 𝐹(𝛽, 𝑡, 𝑚, 𝑀) e será representado por: (0. 𝑑1𝑑2𝑑3 … 𝑑𝑡)β 𝑒 em que 𝑑1 ≠ 0. Exemplo 1: Número na base decimal Representação em ponto flutuante mantissa base Expoente 1532 0.1532104 0.1532 10 4 15.32 0.1532102 0.1532 10 2 0.00255 0.25510-2 0.255 10 -2 10 0.10102 0.10 10 1 10 0.101024 0.1010 2 4 Exemplo 2: Escrever os números a seguir, onde todos estão na base β = 10, em ponto flutuante na forma normalizada: a) 0,35 b) −5,172 c) 0,0123 d) 5391,3 e) 0,0003 5 Exemplo 3: Considere o sistema 𝐹(10,3, −2,2). Represente neste sistema os números do exemplo anterior Exemplo 4: Seja 𝑓(𝑥) uma função contínua real definida no intervalo [𝑎, 𝑏], 𝑎 < 𝑏, e sejam 𝑓(𝑎) < 0 e 𝑓(𝑏) > 0. Então, de acordo com o teorema do valor intermediário (do cálculo diferencial e integral), existe x, 𝑎 < 𝑥 < 𝑏, tal que 𝑓(𝑥) = 0. Seja 𝑓(𝑥) = 𝑥3 − 3, determinar x tal que 𝑓(𝑥) = 0. Considerar 𝑡 = 10 e 𝛽 = 10. 3. Mudança de Base Como já foi dito antes, um número pode ser representado em mais de uma base e, através de uma mudança de base, é sempre possível determinar a representação em uma nova base. A seguir tem-se como se faz mudança de base: De uma base qualquer para a base 10: o procedimento consiste em multiplicar cada algarismo da parte inteira do número por potências crescentes da base, da direita para a esquerda, e multiplicar cada algarismo do número após a vírgula por potências decrescentes da base, da esquerda para a direita, e, por fim, somar todas as parcelas. Exemplo: Dado o número 1101,11 na base 2, encontrarseu valor correspondente na base 10 (1101,11)2 = 1 × 2 0 + 0 × 21 + 1 × 22 + 1 × 23 + 1 × 2−1 + 1 × 2−2 = 1 + 0 + 4 + 8 + 1 2 + 1 4 = 13,75 Da base 10 para uma base qualquer: O procedimento consiste em dividir a parte inteira do número pela nova base e continuar dividindo o quociente pela base até que o último quociente seja menor que o divisor (ou seja, a base). A parte inteira do número nessa base será obtido tomando-se o último quociente e todos os restos das divisões anteriores. O número após a vírgula deve ser multiplicado pela base e continua multiplicando a parte decimal do resultado obtido pela base. A parte decimal do número será então obtida tomando-se a parte inteira do resultado de cada multiplicação. Exemplo: Dado o número 13,75 na base 10, encontrar seu valor correspondente na base 2 13 2 1 6 2 0 3 2 1 1 0,75 × 2 = 𝟏, 5 0,5 × 2 = 𝟏, 0 Logo (13,75)10 = (1101,11)2 6 4. Erros Numéricos Como foi visto anteriormente, não existe uma forma de representar um número irracional em uma máquina, pois a mesma só consegue representar números com uma quantidade finita de algarismos. Portanto, o número apresentado pela calculadora ou computador é uma aproximação do valor real. E quão próximo do valor real está o resultado mostrado? A diferença entre o valor real e o valor aproximado que efetivamente foi calculado é definido como erro, ou seja: Erro = (valor real) – (valor aproximado) Quanto menor for esse erro, mais preciso será o resultado da operação. Essa definição corresponde ao erro absoluto de um cálculo. Porém, se os números trabalhados forem muito grandes, o erro pode ser grande em termos absolutos, mas o resultado ainda será preciso. E o caso inverso também pode ocorrer: um erro absoluto pequeno, mas um resultado impreciso. Exemplos: 1. Seja o resultado de uma operação o valor 2.123.542,7 enquanto que o valor real deveria ser 2.123.544,5. O erro absoluto neste caso é 1,8. Comparada com o valor real, essa diferença (o erro) é bem pequena, portanto, podemos considerar o resultado preciso. 2. Seja o resultado de uma operação o valor 0,234 enquanto que o resultado esperado era 0,128. O erro absoluto será igual a 0,106, porém o resultado é bastante impreciso. A fim de evitar esse tipo de ambiguidade, pode-se criar uma nova definição: o erro relativo, que corresponde ao quociente entre o erro absoluto e o valor real da grandeza a ser calculada, ou seja: realvalor aproximadovalorrealvalor relativoerro )()( O erro relativo é uma forma mais interessante de se avaliar a precisão de um cálculo efetuado. Exemplo: Calcule os erros relativos dos exemplos anteriores. 7 3.1 Tipos de Erros O erro cometido ao se calcular o valor de 2 , por exemplo, é apenas um tipo de erro que pode surgir ao se resolver um problema real. Outros tipos de erros também podem aparecer devido a outros tipos de problemas ou limitações. A solução matemática de um determinado problema envolve diversas etapas. A solução do problema se inicia com a criação de um modelo matemático do sistema em questão. Esse modelo sempre apresentará aproximações e limitações. Além disso, na grande maioria das vezes, dados experimentais serão utilizados para se obter a solução. Como toda medida experimental apresenta uma incerteza, a solução do problema será influenciada pelas mesmas. Portanto, logo de início, existem diversos fatores que introduzem incertezas na solução numérica do problema. Esse tipo de erro é chamado de erro inicial. O problema para o cálculo de 2 , que se refere a inevitável limitação na representação de números irracionais (por exemplo), introduz erros no resultado. Esse tipo de erro é chamado de erro de arredondamento. Tem-se ainda um outro tipo de problema prático que pode surgir ao se realizar determinadas operações, como calcular o valor de e x . Ao utilizar uma máquina digital (calculadora ou computador), como esse equipamento irá realizar essa operação? Sabe-se que a exponencial é uma função que pode ser representada por uma série infinita dada por: !!3!2 1 32 n xxx xe n x e na prática é impossível calcular seu valor exato. Neste caso, faremos um truncamento dessa série, e o erro gerado no valor de e x é chamado de erro de truncamento. 3.2 Propagação e Condicionamento de Erros Numéricos Seja a expressão 32 e . Ao se calcular o valor de 2 , tem-se que realizar um arredondamento, que leva ao um resultado aproximado de 2 , ou seja, existe um erro de arredondamento associado ao resultado. Para se calcular o valor de e 3 tem-se que fazer um truncamento, que também irá gerar um erro no resultado obtido. Portanto, o resultado da operação de subtração entre 2 e e 3 apresentará um erro que é proveniente dos erros nos valores de 2 e e 3 separadamente. Em outras palavras, os erros nos valores de 2 e e 3 se propagam para o resultado de 32 e . Pode-se concluir então que, ao se resolver um problema numericamente, a cada etapa e a cada operação realizada, deve surgir diferentes 8 tipos de erros gerados das mais variadas maneiras, e estes erros se propagam e determinam o erro no resultado final obtido. A propagação de erros é muito importante pois, além de determinar o erro final de uma operação numérica, ela também determina a sensibilidade de um determinado problema ou método numérico. Se uma pequena variação nos dados de entrada de um problema levar a uma grande diferença no resultado final, considera-se que essa operação é mal-condicionada, ou seja, existe uma grande propagação de erros nessa operação. Por outro lado, se uma pequena variação nos dados de entrada leva a apenas uma pequena diferença no resultado final, então essa operação é bem-condicionada. 3.3 Erros na Aritmética de Ponto Flutuante O primeiro tipo de erro que está presente na forma como computadores trabalham com números corresponde aos erros de arredondamento e truncamento. Como citado anteriormente, esses erros estão presentes pois os computadores precisam representar os números com uma quantidade finita de algarismos. Vamos supor, para simplificação, um computador com uma representação de ponto flutuante na base decimal e uma mantissa de 4 algarismos (𝑡 = 4). A fim de representar em ponto flutuante nesse computador, por exemplo, o número 734,68, tem-se que truncá-lo para 0,7346103 ou arredonda-lo para 0,7347103. Portanto, no truncamento, estaríamos cometendo um erro absoluto 0,810-1 e no arredondamento, um erro de 0,210-1. Podemos generalizar esse exemplo e dizer que, em uma representação de ponto flutuante na base β e mantissa de 𝑡 algarismos, os erros de truncamento serão dados por: teerro onde o número em questão pertence ao sistema 𝐹(𝛽, 𝑡, 𝑚, 𝑀). E os erros de arredondamento serão dados por: teerro 2 1 Portanto, para uma representação numérica com 𝑡 = 24 ou 𝑡 = 53 (como no caso da maioria dos computadores) esse erro é muito pequeno. Apesar de pequeno, é importante lembrar que ele se propagará nas operações aritméticas realizadas pelo computador. Como exemplo, ao se realizar a soma dos números 6563 (= 0,6563104) e 3,375 (= 0,3375101) obtém-se 6566,375. Em um computador fictício de mantissa com 4 algarismos, o resultado dessa operação será 0,6566104 = 6566. Ou seja, 9 apesar de partirmos de dois números exatos, o resultado da soma não será exata. Mais uma vez, para um computador real, esse erro será pequeno, porém, se um número muito grande de operações for realizado e se existira necessidade de se obter um resultado bastante preciso, será necessário se levar em consideração esse tipo de erro para avaliar o resultado obtido. Existe mais um tipo de erro que aparece quando computadores manipulam números. Esse erro se refere à conversão de números de uma base para a outra. O tipo de conversão mais comum é da base decimal (usada por humanos) para a base binária (usada por computadores) e vice-versa. Um exemplo bastante peculiar é o número 0,1. Ao se converter esse número da base decimal para a base binária (existem diversos algoritmos para se realizar essa conversão), obtém-se como resposta: (0,1)10 = (0,0001100110011. . . )2 Portanto, nota-se que, ao se converter o número 0,1 da base decimal para a base binária, obtem-se um número com infinitos algarismos! Como esse número não pode ser representado pelo computador, ele será truncado, introduzindo um erro na sua representação. Uma forma interessante de constatar esse problema é escrevendo um pequeno programa que calcule o valor de 1000 1 1,0 i . Você verá que esse número não é igual a 100! 10 Exercícios 1. Considere o sistema 𝐹(10,4, −4,4). Represente neste sistema os números: a) 4321,4 b) −0,0013523 c) 125,64 d) 57481,23 e) 0,00034 2. Considere os seguintes números que estão na base 10. Escreva-os na base 2: a) 34 b) 0,125 c) 33,023 3. Considere os seguintes números que estão na base 2. Escreva-os na base 10: a) 110111 b) 0,01011 c) 11,0101 4. Considere os seguintes números que estão na base 4. Escreva-os na base 5: a) 33 b) 0,132 c) 32,013 5. Considere o sistema 𝐹(3,3, −2,1). a) Quantos e quais números podem ser representados nesse sistema? b) Represente nesse sistema os números: 𝑥1 = (0,40)10 e 𝑥2 = (2,8)10 11 6. Considere o sistema 𝐹(2,5, −3,1). c) Quantos e quais números podem ser representados nesse sistema? d) Qual o maior número na base 10 que podemos representar neste sistema (sem fazer arredondamento). 7. 8. 9. 10. 12 Respostas: 7. (a) 0,001264 e 4,025.10 -4 (b) 7,346.10 -6 e 2,338.10 -4 (c) 2,818.10 -4 e 1,037.10 -4 (d)2,136.10 -4 e 1,1510.10 -4 (e)420 e 1,042.10 -2 8. (a) [3,138451061; 3,144734246] (b) [1,412799349; 1,4156627776] (c) [149,85; 150,15] (d) [1498,5; 1501,5] 9. Aproximação 2,7166667 Erro absoluto 0,0016152 Erro relativo 5,9418.10 -4 10. 𝒙 = 𝟔𝟕, 𝟒𝟐 e 𝒙 = 𝟖, 𝟖𝟔𝟗
Compartilhar