Baixe o app para aproveitar ainda mais
Prévia do material em texto
Cálculo Numérico Aula 01 - 13/abr/2021 Wilson H. Hirota Universidade Federal de São Paulo wilson.hirota@unifesp.br Objetivos • Gerais ◦ Introduzir os métodos clássicos utilizados na resolução numérica de problemas matemáticos aplicados à Engenharia e Ciências • Espećıficos ◦ Capacitar os alunos a implementar computacionalmente os métodos numéricos clássicos ◦ Capacitar o aluno a: • Obter a solução de sistemas de equações algébricas lineares • Obter as ráızes de uma equação algébrica não linear • Fazer o ajuste de curvas a dados experimentais • Aplicar os métodos de interpolação e integração numérica e estimar os erros associados. • Metodologia ◦ Aulas teóricas expositivas e aulas práticas com resolução de exerćıcios em computador (Scilab) 2 / 80 Bibliografia • Burden, R. L.; Faires, J. D. Análise Numérica. São Paulo, SP: Cengage Learning, 2008. • Burian, R.; Lima, A. C. Cálculo Numérico. Editora LTC, 2007 • Chapra, S. C.; Canale, R. P. Métodos Numéricos para Engenharia. 5o ed. São Paulo: McGraw-Hill, 2008 • Franco, N. M. B. Cálculo Numérico. Editora Pearson Prentice Hall, 2007 • Ruggiero, M. A. G.; Lopes, V. L. R. Cálculo Numérico - Aspectos Teóricos e Computacionais. 2o ed. Editora Makron Books do Brasil, 1996 • Sperandio, D.; Mendes, J. T.; Monken e Silva, L. H. Cálculo Numérico: Caracteŕısticas Matemáticas e Computacionais dos Métodos Numéricos. Editora Prentice-Hall, 2003 • Cunha, M. Cristina C. Métodos Numéricos. Editora Unicamp, 2009 • Arenales, S.; Darezzo, A. Cálculo Numérico: Aprendizagem com apoio de software. Editora Thomson Learning, 2008 • Asano, C. H.; Colli, E. Cálculo Numérico: Fundamentos e Aplicações. São Paulo: USP, 2009 (<https://www.ime.usp.br/˜asano/LivroNumerico/LivroNumerico.pdf>) 3 / 80 https://www.ime.usp.br/~asano/LivroNumerico/LivroNumerico.pdf Computação Numérica • Introdução/Motivações ◦ Durante o projeto e a operação de um processo, os engenheiros qúımicos frequentemente se deparam com diversos desafios: • Qual estratégia usar para controlar a pressão de topo de uma coluna debutanizadora? • Quais variáveis (controladas e manipuladas) devem ser selecionadas para a implementação de um controlador preditivo multivariado? • Ao mudar as condições da planta de gás, quanto tempo será necessário para o processo atingir o regime permanente? • Qual a perda de gás em uma linha de transporte de gás? • Qual a energia mı́nima requerida para o processo de compressão de propeno? O que todas essas perguntas têm em comum? 4 / 80 Computação Numérica • Introdução/Motivações O que todas essas perguntas têm em comum? ◦ Requerem muitas informações preliminares ◦ Requerem a realização de diversos cálculos complexos ◦ São inviáveis de serem calculadas manualmente ◦ A precisão dos resultados requer rigor termodinâmico ◦ Uma pergunta pode ser consequência de outra ◦ Podem ser respondidas com o aux́ılio da Modelagem Matemática e Simulação de Processos 5 / 80 Computação Numérica • Introdução/Motivações ◦ A utilização de simuladores matemáticos ou numéricos requer a execução de uma sequência de etapas bem definidas ◦ Em Engenharia, assim como em qualquer área do conhecimento cient́ıfico, a resolução de um problema passa inicialmente por uma fase de observação e entendimento dos fenômenos f́ısicos e qúımicos envolvidos no problema em questão, a fim de construir um modelo matemático que represente, com a maior fidelidade posśıvel, o problema que desejamos tratar. ◦ O que é um modelo matemático? • Um modelo matemático nada mais é do que uma abstração matemática de um processo/fenômeno real (Seborg; Edgar; Mellichamp, 20101) • Exemplo: Equação geral de conservação microscópica ∂ ∂t (ρϕ) +∇ · (ρvϕ) = ˙σVφ −∇ · jφ 1 Seborg, D. E.; Edgar, T. F.; Mellichamp, D. A. Process Dynamics and Control. [S.l.]: John Wiley & Sons, 2010 6 / 80 Computação Numérica • Introdução/Motivações ◦ Uma vez estabelecidas as equações que descrevem o processo, o passo seguinte será resolvê-las Infelizmente, grande parte dos modelos em Engenharia Qúımica não tem so- lução anaĺıtica. Portanto, a computação e os métodos numéricos têm atuado como importantes ferramentas para a obtenção de soluções aproximadas de tais problemas ◦ Por outro lado, quando optamos pela resolução computacional e numérica de um modelo, introduzimos uma série de erros e incertezas decorrentes, principalmente: • da precisão dos dados de entrada; • de erros na fase de modelagem; • da capacidade limitada do hardware em armazenar números em ponto flutuante ; • das operações numéricas provenientes de um algoritmo numérico 7 / 80 Computação Numérica • Introdução/Motivações ◦ Os dados de entrada contêm uma imprecisão inerente (i.e. não há como evitar que ocorram), uma vez que representam medidas obtidas através de sensores e equipamentos anaĺıticos ◦ A influência destas perturbações no resultado final vai depender da estabilidade do problema Em algumas situações, conhecidas como problemas malcondicionados, a in- fluência dessas pertubações pode ser desastrosa e inviabilizar completa- mente as soluções numéricas. Neste caso, são necessárias técnicas especializadas, objeto de uma área da matemática conhecida como Problemas Inversos ◦ Os erros na fase de modelagem são os erros decorrentes de simplificações (hipóteses simplificadoras). O principal objetivo das hipóteses simplificadoras é desenvolver um modelo matemático que tenha condições de ser tratado com as ferramentas matemáticas dispońıveis e que demande um tempo computacional razoável 8 / 80 Computação Numérica • Introdução/Motivações ◦ Os erros associados tanto aos cálculos quanto às medidas podem ser caracterizados com relação a sua acurácia e precisão • Acurácia (ou exatidão): se refere a quão próximo o valor calculado ou medido está próximo do valor verdeiro • Precisão: se refere a quão próximos os valores individuais calculados ou medidos estão uns dos outros ◦ O conjunto de todas essas incertezas e erros certamente vai ”contaminar”o resultado final ◦ Se esta contaminação é despreźıvel, ou se ela compromete o resultado, é uma análise necessária para que tenhamos resultados realistas ◦ Assim, é necessário que tenhamos algum controle e conhecimento sobre os erros que foram sendo introduzidos, e como eles se propagam durante a resolução numérica dos modelos matemáticos ◦ Portanto, o objetivo desta seção introdutória é apresentar os principais erros que podem surgir durante a fase de resolução numérica de um problema: • Erros de arredondamento • Erros de truncamento 9 / 80 Computação Numérica • 1. Erro absoluto e Erro relativo ◦ A partir do momento em que se calcula um resultado aproximado, é preciso saber como estimar ou delimitar o erro cometido na aproximação ◦ A delimitação do erro é sempre desejável, pois com ela tem-se um valor em que o erro cometido seguramente é inferior a um limite ◦ Portanto, uma questão central em computação numérica é a quantificação dos erros cometidos durante a solução numérica de um dado problema. Para tanto, precisamos definir medidas de erros. As medidas de erro mais utilizados são: • Erro absoluto • Erro relativo Definição: Erro absoluto Seja x uma aproximação do valor exato x∗, o erro absoluto da aproximação x̄ é definido como: Eabs = |x∗ − x̄ | 10 / 80 Computação Numérica • 1. Erro absoluto e Erro relativo Definição: Erro absoluto Seja x uma aproximação do valor exato x∗, o erro absoluto da aproximação x̄ é definido como: Eabs = |x∗ − x̄ | ◦ Um defeito da definição de erro absoluto é que esta definição não leva em conta a ordem de grandeza dos valores envolvidos • Por exemplo: um erro absoluto de 5kgf /cm2 na leitura de uma pressão de 2500kgf /cm2representa uma boa acurácia, enquanto que o mesmo erro na medida de uma pressão de 20kgf /cm2 representa uma baixa acurácia ◦ Então, dependendo da ordem de grandeza dos números envolvidos, o erro absoluto não é suficiente para descrever a precisão de um cálculo. ◦ Por esta razão, o erro relativo Erel é amplamente empregado 11 / 80 Computação Numérica • 1. Erro absoluto e Erro relativo Definição: Erro relativo Seja x uma aproximação do valor exato x∗, o erro relativo da aproximação x̄ é defi- nido como: Erel = ∣∣∣∣Eabsx∗ ∣∣∣∣ = ∣∣∣∣ x∗ − x̄x∗ ∣∣∣∣ ◦ Observe que o erro relativo é adimensional e, muitas vezes, é expresso em porcentagens. Mais precisamente, o erro relativo em porcentagem da aproximação x̄ é dado por: Erel(%) = ∣∣∣∣ x∗ − x̄x∗ ∣∣∣∣× 100% 12 / 80 Computação Numérica • 1. Erro absoluto e Erro relativo ◦ Por exemplo: a. Considere o valor exato x∗ = 2345.713 e o valor aproximado x̄ = 2345.000, então: Eabs = 0.713 e Erel = 0.00030396 b. Considere agora o valor exato x∗ = 1.713 e o valor aproximado x̄ = 1.000. Neste caso temos: Eabs = 0.713 e Erel = 0.416229 ◦ Observe que nos dois exemplos o erro absoluto é o mesmo, embora o erro cometido pela aproximação seja muito mais significativo no exemplo (b), pois, em (a), o erro relativo é da ordem de 0.03%, e em (b), é da ordem de 41.6% 13 / 80 Computação Numérica • 1. Erro absoluto e Erro relativo ◦ Observe que nas duas definições anteriores, os erros são calculados em relação ao valor verdadeiro ◦ Entretanto, na maioria dos casos o valor exato (x∗) não é conhecido a priori ◦ Assim, é necessário trabalhar com um limitante superior (�), ou majorante, que satisfaça a condição: |x∗ − x̄ | ≤ � onde � é um limitante conhecido como erro máximo absoluto ◦ Da desigualdade anterior pode-se concluir que o valor exato pertence ao intervalo : −� ≤ x∗ − x̄ ≤ � =⇒ x̄ − � ≤ x∗ ≤ x̄ + � isto é, x̄ é o valor aproximado da grandeza x∗ com erro absoluto não superior a �. 14 / 80 Computação Numérica • 1. Erro absoluto e Erro relativo Portanto, em termos práticos, o erro é calculado usando-se a melhor estima- tiva dispońıvel do valor verdadeiro, uma vez que nos procedimentos numéricos geramos uma sequência de soluções aproximadas que convergem ou não para a solução do problema ◦ Então, o erro absoluto aproximado (�a ) e o erro relativo aproximado (δr ) serão calculados da seguinte forma: • Erro absoluto: �a = ∣∣∣x̄k+1 − x̄k ∣∣∣ • Erro relativo: δr = ∣∣∣∣ x̄k+1 − x̄kx̄k+1 ∣∣∣∣ ◦ Os cálculos (as iterações) são repetidos até que: |�a | ≤ � ou |δr | ≤ � ou seja, os erros absolutos e relativos são usados como critério de parada nesta sequência de aproximações 15 / 80 Computação Numérica • 1. Erro absoluto e Erro relativo ◦ Se a relação |�a | ≤ � (ou |δr | ≤ �) for válida, supõe-se que x̄k+1 é a solução do problema dentro de uma tolerância � pré-estabelecida; caso contrário devemos proceder ao cálculo de outro termo da sequência ◦ Exemplo 01: Para resolver a equação do tipo f (x) = x2 − a = 0, com a > 0, podemos utilizar o seguinte processo iterativo: r0 = x0 rk+1 = 1 2 ( rk + a rk ) , k = 0, 1, 2, . . . Suponha que a = 2 e x0 = 1 (chute inicial), então: k rk rk+1 |rk+1 − rk | ∣∣∣ rk+1−rkrk+1 ∣∣∣ 0 1 1.5 0.5 0.333333 1 1.5 1.416667 0.08333 0.058824 2 1.416667 1.414216 0.002451 0.001733 ... ... ... ... ... 16 / 80 Computação Numérica • 1. Erro absoluto e Erro relativo ◦ Exemplo 01: • Assim, dado um valor inicial arbitrário x0, podemos através da expressão anterior, gerar uma sequência soluções aproximadas r1, r2, r3, . . . • Dado que a propriedade de convergência da sequência de aproximações esteja estabelecida e uma tolerência pré-fixada � esteja definida para o cálculo de uma raiz da equação f (x) = 0, podemos verificar de forma absoluta, se a sequência de aproximações atingiu a precisão anterior �, realizando o seguinte teste: • Se |rk+1 − rk | ≤ � for verdadeiro, dizemos que rk+1 é raiz da equação f (x) = 0 com tolerância �; caso contrário, devemos calcular outro elemento da sequência e, de forma relativa, realizar o seguinte teste: • Se ∣∣∣ rk+1−rkrk+1 ∣∣∣ ≤ � for verdadeiro, concluimos que rk+1 é a raiz da equação com tolerância � e, em caso contrário, devemos proceder ao cálculo de outro termo da sequência 17 / 80 Computação Numérica • 1. Erro absoluto e Erro relativo ◦ Exemplo 01: Para resolver a equação do tipo f (x) = x2 − a = 0, com a > 0, podemos utilizar o seguinte processo iterativo: r0 = x0 rk+1 = 1 2 ( rk + a rk ) , k = 0, 1, 2, . . . Suponha que a = 2 e x0 = 1 (chute inicial), então: k rk rk+1 |rk+1 − rk | ∣∣∣ rk+1−rkrk+1 ∣∣∣ 0 1 1.5 0.5 0.333333 1 1.5 1.416667 0.08333 0.058824 2 1.416667 1.414216 0.002451 0.001733 ... ... ... ... ... • Observe que não é posśıvel obter o valor exato da √ 2, pois se trata de um número irracional • Portanto, também é conveniente relacionar os erros ao número de algarismos significativos da aproximação 18 / 80 Computação Numérica • 2. Algarismos significativos O conceito de algarismos significativos foi desenvolvido para designar formalmente a confiabilidade de um valor numérico, isto é, os algarismos significativos de um número são aqueles que podem ser usados com confiança Algarismos significativosAlgarismos significativos ◦ Por exemplo: • O valor aproximado π̄ = 3.14 para π = 3.1415926535 . . . tem 3 algarismos significativos • O valor aproximado 0.3333 para 1/3 = 0.33333333 . . . tem 4 algarismos significativos • O valor aproximado 0.0067 para e−5 = 0.006737946999 . . . tem 2 algarismos significativos 19 / 80 Computação Numérica • 2. Algarismos significativos ◦ Embora a avaliação dos algarismos significativos de um número seja um procedimento imediato, alguns casos podem gerar confusão • Por exemplo, zeros não são sempre algarismos significativos porque eles podem ser necessários apenas para localizar a v́ırgula decimal • Os números 0.00001845, 0.0001845 e 0.001845 têm quatro algarismos siginficativos • Em 001234.56 tem 6 algarismos significativos, pois os dois zeros à esquerda não são significativos • Analogamente, quando zeros à direita são usados em números grandes, não é claro quantos, ou se algum, destes zeros são significativos • O valor 45300 pode ter três, quatro ou cinco algarismos significativos, dependendo de os zeros serem conhecidos com confiança • Tais incertezas podem ser resolvidas usando-se a notação cient́ıfica, onde 4.53× 104, 4.530× 104 e 4.5300× 104 designam que o número é conhecido com três, quatro ou cinco algarismos significativos, respectivamente 20 / 80 Computação Numérica • 2. Algarismos significativos ◦ Ao efetuar operações aritméticas com números em ponto flutuante também é necessário seguir algumas regras para a apresentação dos resultados: • Adição e Subtração: Quando somamos ou subtráımos dois números com quantidade de algarismos significativos diferentes, o resultado deve manter a precisão do operando de menor precisão (i.e. deverá ter o mesmo número de casas decimais do operando de menor precisão) • Por exemplo: • Vamos supor que se queira efetuar o operação 15.67 + 0.1278 • O número 15.67 tem 4 algarismos siginficativos e o último algarismo significativo é o 7, que ocupa a casa dos centésimos. • O número 0.1278 também possui 4 algarismos significativos, porém o último algarismo significativo, o número 8, ocupa a casa dos milésimos • Portanto, o último algarismo significativo do resultado deve estar na casa dos centésimos, ou seja: 15.67 + 0.1278 = 15.7978 que, arredondado, fica 15.80 21 / 80 Computação Numérica • 2. Algarismos significativos ◦ Ao efetuar operações aritméticas com números em ponto flutuante também é necessário seguir algumas regras para a apresentação dos resultados: • Multiplicação e divisão: Quando multiplicamosou dividimos dois números com quantidade de algarismos significativos diferentes, o resultado deve ter o mesmo número de algarismos significativos do operando com o menor número de algarismos significativos. • Por exemplo: • Na operação 7.2569/4 o dividendo tem 5 algarismos significativos e o divisor apenas 1 algarismo significativo. • Portanto, o resultado também deve ter apenas uma algarismo significativo, ou seja, 7.2569/4 = 1.81423 que, arredondado, é igual a 2 • Analisando os dois exemplos anteriores, é fácil concluir que haverá um acúmulo de erros de arredondamento se um grande número de operações aritméticas for efetuado para resolver um determinado problema 22 / 80 Computação Numérica • 2. Algarismos significativos ◦ Neste sentido, o conceito de algarismos significativos tem duas implicações importantes: 1. Como os métodos numéricos fornecem resultados aproximados, é necessário especificar a quantidade de algarismos significativos de uma aproximação considerada aceitável • De uma forma geral, podemos estabelecer a seguinte definição Diz-se que o número x̄ se aproxima do valor x∗ com n algarismos significativos corretos se n for o maior inteiro não-negativo para o qual2:∣∣∣∣ x∗ − x̄x∗ ∣∣∣∣ ≤ 0.5× 10−n 2 Não existe uma definição única na literatura para o conceito de algarismos significativos corretos. Embora não sejam equivalentes, todas elas transmitem a mesma idéia. 23 / 80 Computação Numérica • 2. Algarismos significativos Diz-se que o número x̄ se aproxima do valor x∗ com n algarismos significa- tivos corretos se n for o maior inteiro não-negativo para o qual:∣∣∣∣ x∗ − x̄x∗ ∣∣∣∣ ≤ 0.5× 10−n ◦ Exemplo 02: Em matemática, as funções, em geral, podem ser representadas por séries infinitas. Por exemplo, a função exponencial pode ser calculada usando-se a expansão em série de Maclaurin: ex = ∞∑ i=0 = 1 + x + x2 2! + x3 3! + . . .+ xk k ! + . . . Utilizar a expansão em série fornecida acima para calcular um valor aproximado de e0.5 com pelo menos três algarismos significativos corretos 24 / 80 Computação Numérica • 2. Algarismos significativos Diz-se que o número x̄ se aproxima do valor x∗ com n algarismos significa- tivos corretos se n for o maior inteiro não-negativo para o qual:∣∣∣∣ x∗ − x̄x∗ ∣∣∣∣ ≤ 0.5× 10−n ◦ Exemplo 02: • Algoritmo: • Começando com ex = 1, some um termo de cada vez para estimar o valor de e0.5 • Em seguida, calcule o erro relativo e o erro relativo aproximado (δr ). Observe que o valor verdadeiro é e0.5 = 1.648721 . . . • Repita o processo até que o erro relativo aproximado atenda o critério de erro que garanta três algarismos significativos corretos, ou seja: δr ≤ 0.5× 10−n = 0.5× 10−3 =⇒ δr ≤ 0.0005 ou δr ≤ 0.05% 25 / 80 Computação Numérica • 2. Algarismos significativos Diz-se que o número x̄ se aproxima do valor x∗ com n algarismos significa- tivos corretos se n for o maior inteiro não-negativo para o qual:∣∣∣∣ x∗ − x̄x∗ ∣∣∣∣ ≤ 0.5× 10−n ◦ Exemplo 02: k e0.5k Erel(%) a δr (%)b 1 1 39.3 2 1.5 9.02 33.3 3 1.625 1.44 7.69 4 1.645833333 0.175 1.27 5 1.648437500 0.0172 0.158 6 1.648697917 0.00142 0.0158 a Erro relativo verdadeiro b Erro relativo aproximado Observe que, em vez de três algarismos sig- nificativos, o resul- tado é exato até o quinto algarismo sig- nificativo. 26 / 80 Computação Numérica • 2. Algarismos significativos ◦ Neste sentido, o conceito de algarismos significativos tem duas implicações importantes: 2. Em computação como cada número tem apenas um número fixo e finito de algarismos, números como π ou √ 5 jamais poderão ser representados exatamente. Além disso, o sistema binário (representação numérica normalmente utilizada pelos computadores) pode não representar precisamente certos números exatos na base 10 A omissão dos algarismos significativos remanescentes é chamada de erro de arredondamento O erros numéricos de arredondamento estão diretamente relacionados à ma- neira como os números são armazenados no computador. Estes erros surgem devido ao fato de algumas propriedades básicas da aritmé- tica real não valerem quando executadas no computador, pois, enquanto na matemática alguns números são representados por infinitos algarismos, na má- quina isso não é posśıvel, tendo em vista que a memória da máquina é finita. 27 / 80 Computação Numérica • 2. Algarismos significativos O erros numéricos de arredondamento estão diretamente relacionados à maneira como os números são armazenados no computador. Estes erros surgem devido ao fato de algumas propriedades básicas da arit- mética real não valerem quando executadas no computador, pois, enquanto na matemática alguns números são representados por infinitos algarismos, na máquina isso não é posśıvel, tendo em vista que a memória da máquina é finita. ◦ Dessa forma, os erros de arredondamento dependem de como os números são representados na máquina, e a representação, por sua vez, depende da base em que são escritos os números e a quantidade máxima de d́ıgitos usados nessa representação ◦ Portanto, para melhor enteder como ocorre o erro de arredondamento, é importante conhecer os diferentes sistemas de numeração e como os números são armazenados em um computador 28 / 80 Computação Numérica • 3. Sistema de numeração posicional Um sistema de numeração (ou sistema numérico) define como um número pode ser representado utilizando diferentes bases. Por exemplo: Os números (2A)16 e (52)8 referem-se à mesma quantidade, (42)10, mas suas representações são diferentes. Isso é o mesmo que utilizar as palavras cheval e horse para se referir à mesma entidade, um cavalo. ◦ Diversos sistemas de numeração foram utilizados no passado, e podem ser classificados em dois grupos: sistemas posicionais e sistemas não posicionais ◦ Nesta secão, o objetivo é discutir os sistema de numeração posicional, uma vez que é o sistema atualmente utilizado. 29 / 80 Computação Numérica • 3. Sistema de numeração posicional Em um sistema de numeração posicional, a posição que um śımbolo (d́ıgito) ocupa no número determina o valor que ela representa ◦ De um modo geral, um número x real na base β é representado por: x = ± (dk−1 . . . d2d1d0 · d−1d−2 . . . d−l )β ou na forma polinomial (representação em ponto fixo) x = ± dk−1 × βk−1 + . . .+ d1 × β1 + d0 × β0︸ ︷︷ ︸ parte inteira + parte fracionária︷ ︸︸ ︷ d−1 × β−1 + d−2 × β−2 + . . .+ d−l × β−l onde d é o conjunto de śımbolos (algarismos do número), k é o número de digitos da parte inteira, l é o número de d́ıgitos da parte fracionária e β é a base. O sinal ± mostra que o número pode ser positivo ou negativo. 30 / 80 Computação Numérica • 3. Sistema de numeração posicional ◦ Exemplo 03: A seguir, os valores posicionais para o número inteiro 224, no sistema decimal 102 101 100 valor posicional 2 2 4 número x = + 2× 102 + 2× 101 + 4× 100 valor ◦ Exemplo 04: A seguir, veja os valores posicionais para o número real +24.13 101 100 10−1 10−2 valor posicional 2 4 • 1 3 número x = + 2× 10 + 4× 1 + 1× 0.1 + 3× 0.01 valor 31 / 80 Computação Numérica • 3. Sistema de numeração posicional ◦ Um sistema de numeração é determinado fundamentalmente pela base, que indica a quantidade de śımbolos e o valor de cada śımbolo ◦ De um modo geral, podemos dizer que as bases numéricas mais importantes em computação são: • Base decimal: neste sistema, a base é igual a 10, e utilizamos 10 śımbolos para representar um número d = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} • Base binária: neste sistema, a base é igual a 2, e utilizamos somente dois śımbolos para representar uma número d = {0, 1} • Base octal: neste sistema, a base é igual a 8, e utilizamos oito śımbolos para representar um número d = {0, 1, 2, 3, 4, 5, 6, 7} • Base hexadecimal: neste sistema, a base é igual a 16, e utilizamos 16 śımbolospara representar um número d = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,A,B ,C ,D ,E ,F} 32 / 80 Computação Numérica • 3. Sistema de numeração posicional ◦ Apesar do sistema decimal (base 10) ser mais familiar a um ser humano, normalmente um computador opera no sistema binário, pois um computador é composto de chaves eletrônicas que podem ficar em apenas dois estados, ligado e desligado ◦ Portanto, para representar diferentes tipos de dados, utilizamos um padrão binário3, uma sequência, ou como às vezes é chamado, uma cadeia de bits4. Historicamente, um padrão binário de 8 bits é chamado de byte ◦ Por exemplo, a sequência abaixo mostra um padrão binário em um computador de 16 bits 1 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1 3 Algumas vezes, o termo palavra é utilizado para se referir a um padrão binário 4 Um bit (d́ıgito binário) é a menor unidade de dados que pode ser armazenada em um computador, e tem um valor igual a 0 ou 1 33 / 80 Computação Numérica • 3. Sistema de numeração posicional ◦ Dessa forma, na interação entre o usuário e o computador: • Os dados de entrada são enviados pelo usuário em base decimal • Estas informações são convertidas para a base binária, e todas as operações serão efetuadas nesta base • Os resultados finais serão convertidos para a base decimal e, finalmente, serão apresentados ao usuário. ◦ Todo este processo de conversão é uma fonte de erros que afeta o resultado final dos cálculos em razão da limitação da representação de um número em um computador ◦ Na próxima seção, estudaremos os processos para conversão de números do sistema decimal para o binário e vice-versa 34 / 80 Computação Numérica • 4. Conversão de base Binário para decimal: Este tipo de conversão é fácil e rápido, pois multiplicamos cada d́ıgito pelo seu valor posicional no sistema binário e somanos os resultados parciais para obter o número no sistema decimal. x = dk−1 × 2k−1 + . . .+ d1 × 21 + d0 × 20︸ ︷︷ ︸ parte inteira + parte fracionária︷ ︸︸ ︷ d−1 × 2−1 + . . .+ d−l × 2−l ◦ Exemplo 05: Mudar a representação do números: i. 1101 da base 2, para a base 10 ii. 110.11 da base 2, para a base 10 iii. 0.110 da base 2, para a base 10 35 / 80 Computação Numérica • 4. Conversão de base ◦ Exemplo 05: i. 1101 da base 2, para a base 10 1101 = 1× 23 + 1× 22 + 0× 21 + 1× 20 = 8 + 4 + 0 + 1 = 13 Portanto: (1101)2 = (13)10 ii. 110.11 da base 2, para a base 10 110.11 = 1×22+1×21+0×20+1×2−1+1×2−2 = 4+2+0+0.5+0.25 = 6.75 Portanto: (110.11)2 = (6.75)10 0.110 = 1× 2−1 + 1× 2−2 + 0× 2−3 = 0.5 + 0.25 + 0 = 0.75 Portanto: (0.110)2 = (0.75)10 O Scilab oferece uma função para a conversão de um número binário para a base decimal (número inteiro): bin2dec. Exemplo: -> bin2dec(’101’) ans = 5 36 / 80 Computação Numérica • 4. Conversão de base Número inteiro para binário: O procedimento consiste na divisão do número na base decimal sucessiva- mente por 2, armazenando a cada passo, o algarismo do resto (r), até que o quociente da divisão seja igual a 0. O binário é constitúıdo pelos restos das divisões, a partir do resto (bit) mais significativo (rn ) para o menos significativo (r1). 25 2 1 12 2 0 6 2 0 3 2 1 1 2 1 0 Resto (bit) mais significativo Resto (bit) menos significativo Dessa forma temos: (x)10 = (rnrn−1 . . . r1)2 Obs.: O d́ıgito ”mais à direita”́e chamado de bit menos significativo, pois possui o menor peso. Já o d́ıgito ”mais à esquerda”́e chamado de bit mais significativo, pois possui o maior peso. 37 / 80 Computação Numérica • 4. Conversão de base ◦ Exemplo 06: Mudar a representação do número: i. 23 da base 10, para a base 2 23 2 1 11 2 1 5 2 1 2 2 0 1 2 1 0 Portanto: (23)10 = (10111)2 O Scilab oferece uma função para a conversão de um número decimal inteiro para a base binária: dec2bin. Exemplo: -> dec2bin(347) ans = 101011011 38 / 80 Computação Numérica • 4. Conversão de base Número real para binário: Nesses casos, precisamos de dois procedimentos, um para parte inteira (quando presente) e outro para a parte fracionária. Conversão da parte inteira: Para converter a parte inteira, seguimos o proce- dimento apresentado no item b. (i.e. divisões sucessiva por 2). Conversão da parte fracionária: O procedimento é constitúıdo pelos seguintes passo: a. Multiplicar o número fracionário por 2 b. A parte inteira do passo a) é o primeiro d́ıgito binário c. A parte fracionária do passo b) é novamente multiplicada por 2 d. O processo continua até que a parte fracionária seja nula. 39 / 80 Computação Numérica • 4. Conversão de base ◦ Exemplo 07: Mudar a representação dos números: i. 9.625 da base 10, para a base 2 Primeiramente, decompomos 9.625 como a soma de um número inteiro e um número fracionário, ou seja: 9.625 = 9 + 0.625 Para converter a parte inteira, seguimos o procedimento apresentado no item b., o que nos fornece (9)10 = (1001) Para converter a parte fracionária, usamos o algoritmo do slide anterior: 0.625× 2 = 1.25 0.25× 2 = 0.5 0.5× 2 = 1.0 Portanto: (9.625)10 = (1001.101)2 40 / 80 Computação Numérica • 4. Conversão de base ◦ Exemplo 07: Mudar a representação dos números: ii. 0.125 da base 10, para a base 2 0.125× 2 = 0.25 0.25× 2 = 0.5 0.5× 2 = 1.0 Portanto: (0.125)10 = (0.001)2 iii. 3.8 da base 10, para a base 2 Conversão da parte inteira: (3)10 = (11)2 Conversão da parte fracionária: 0.8× 2 = 1.6 0.6× 2 = 1.2 0.2× 2 = 0.4 0.4× 2 = 0.8 0.8× 2 = . . . Logo, (3.8)10 = (11.11001100 . . . )2 tem representação finita no sistema decimal, mas representação infinita na base binária. Esse exemplo ilustra um caso de erro de arredondamento 41 / 80 Computação Numérica • 5. Representação de números em máquina ◦ Conforme visto na seção anterior, um número é modificado para o sistema binário antes de ser armazenado na memória do computador ◦ Contudo, ainda há questões que precisam ser abordadas: • Como os números (inteiros e reais) são armazenados em um computador (representação de um número) • Como armazenar o sinal de um número • Como mostrar o ponto decimal ◦ Existem diversas maneiras de se lidar com a questão do sinal, que serão discutidas posteriormente. ◦ Para o ponto decimal, os computadores utilizam duas diferentes representações: • Representação com ponto fixo: representação utilizada para armazenar números inteiros (i.e. sem parte fracionária) • Representação em ponto flutuante: representação utilizada para armazenar um número real (i.e. com uma parte fracionária) 42 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.1. Representação de números inteiros • Em prinćıpio, a representação de um número inteiro no computador não apresenta qualquer dificuldade. • Como os computadores atuais, em quase sua totalidade, utilizam Unidades Lógica e Aritmética que representam internamente os números em uma base fixa β (β ≥ 2), dado um número inteiro x 6= 0, ele possui uma única representação: x = ±(dk−1 . . . d2d1d0·)β = ±(dk−1 × βk−1 + . . .+ d1 × β1 + d0 × β0) Portanto, um número inteiro normalmente é armazenado na memó- ria utilizando a representação em ponto fixo. • Contudo, um usuário (ou um programa) pode armazenar um número inteiro como um número real, com a parte fracionária definida como zero! • Esse procedimento é adotado, por exemplo, quando um número inteiro for grande demais para ser armazenado em um tamanho predefinido 43 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.1. Representação de números inteiros Para utilizar a memória do computador com mais eficiência, números inteiros sem sinal e com sinal são armazenados de modo diferente! ◦ Um número inteiro sem sinal nunca pode ser negativo, e pode assumir somente o valor 0 ou valores positivos, ou seja, [0,+∞] No entanto, uma vez que nenhum computador poderepresentar todos os números inteiros nesse intervalo, a maioria dos computadores define uma constante chamada de máximo número inteiro sem sinal (Imax), que tem o valor de Imax = 2 n − 1 onde n é o número de bits alocado para representar um inteiro sem sinal 44 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.1. Representação de números inteiros Em sala de aula... Exemplo 08: Represente o número 50 em uma localização de memória de um computador hipotético de 8 bits utilizando a representação sem sinal. 50 em base binária → 1 1 0 0 1 0 Acrescente 2 bits à es- querda → 0 0 1 1 0 0 1 0 ◦ Portanto: (50)10 = (00110010)2 45 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.1. Representação de números inteiros Na prova... Represente o número 20 em uma localização de memória de um computador hipo- tético de 4 bits utilizando a representação sem sinal. Primeiro, transforme o número 20 em base binária: (20)10 = (10100)2 5 (!!!!) é o número de bits para representar o decimal 20 46 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.1. Representação de números inteiros Relembrando.... Como nenhum computador pode representar todos os números inteiros no intervalo [0,+∞], a maioria dos computadores define uma constante chamada de máximo número inteiro sem sinal (Imax), que tem o valor de Imax = 2 n − 1 onde n é o número de bits alocado para representar um inteiro sem sinal • Devido a limitações de tamanho - o número alocado de bits -, o intervalo de números inteiros que pode ser representado é limitado • Por exemplo, em um computador de 4 bits, se uma operação resultar em um valor maior que 24 − 1 = 15 ocorre um erro conhecido como overflow 47 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.1. Representação de números inteiros • A abaixo mostra o que ocorre se tentarmos armazenar um número inteiro sem sinal que seja maior do que 15 em uma localização de memória que pode manter somente 4 bits. 0000 0001 0010 0011 0 1 0 0 0101 0110 0111100010 01 10 10 10 11 1 1 0 0 11 01 11 10 111 1 3 4 5 6 789 10 11 1 2 13 14 15 0 1 2 3 so ma 9 un. • Se armazenarmos o número inteiro 11 em uma localização da memória e, então, tentarmos somar 9, esperamos que o resultado seja 20, mas a resposta do computador é 4 • Como 5 é o número mı́nimo de bits que utilizamos para representar o inteiro 20 (20 = 10100), o computador elimina o bit mais à esquerda e mantém os quatro bits mais à direita, ou seja: (0100)2 = (4)10 48 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.2. Representação sinal-magnitude • Naturalmente é necessário representar também o sinal dos números inteiros • Existem diversas maneiras de se lidar com a questão do sinal. A abordagem mais direta é o formato sinal-magnitude conhecido como método dos valores com sinal, que foi amplamente utilizado nas Unidades Lógica e Aritmética dos primeiros computadores digitais binários • Atualmente, quase todos os computadores utilizam a chamada representação complemento de 2 para armazenar um número inteiro com sinal. Contudo, por questão de tempo, essa representação não será abordada neste curso. • Embora o formato sinal-magnitude não seja comumente empregado para armazenar números inteiros, ele o é para parte de um número real no computador. Por essa razão, analisamos aqui, brevemente, esse formato. No método dos valores com sinal, o bit mais significativo (i.e. o primeiro bit) define o sinal do número. Se for 0, o número é positivo. Se 1, o número é negativo. Os bits restantes são usados para armazenar o número. 49 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.2. Representação sinal-magnitude • Isso significa que em um computador de 32 bits, podemos utilizar somente 31 para representar o valor absoluto de um número (número sem sinal). • Neste método, o intervalo dispońıvel para números inteiros sem sinal (de 0 até 2n − 1) é dividido em dois subintervalos iguais. • Por exemplo, para um computador hipotético de 4 bits o intervalo é de 0000 a 1111. Esse intervalo é dividido em duas metades: de 0000 a 0111 e de 1000 a 1111, conforme pode ser visto na figura abaixo 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 7 −0 −1 −2 −3 −4 −5 −6 −7 Observe que os números negativos aparecem à direita dos positivos, que é o contrário do conceito convencional sobre positivos e negativos. Observe também que temos dois 0s: o zero positivo (0000) e o zero negativo (1000) 50 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.2. Representação sinal-magnitude Portanto, o intervalo de números que pode ser armazenado em uma computador com n bits é de −(2n−1−1) até +(2n−1−1), uma vez que o número zero possui duas representações posśıveis: o zero negativo e o zero positivo • Implicações: • Um computador de 32 bits é capaz de representar todos os inteiros entre −231 + 1 até 231 − 1, ou seja, entre −2.147.483.647 e +2.147.483.647 (−1)s(20 + 21 + . . .+ 230) = (−1)s(231 − 1) = (−1)s × 2.147.483.647 • Se uma operação aritmética resultar em um número que não pode ser armazenado nos registros ocorre um erro conhecido como overflow 51 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.2. Representação sinal-magnitude • A figura abaixo mostra o que acontece se tentarmos armazenar um número inteiro que seja maior que 7 em uma máquina de 4 bits. 0000 0001 0010 0011 0 1 0 0 0101 0110 0111100010 01 10 10 10 11 1 1 0 0 11 01 11 10 111 1 3 4 5 6 7-0-1 -2 -3 -4 -5 -6 -7 +0 1 2 su b trai 7 un. • Se armazenarmos o número inteiro −5 na memória e tentarmos subtrair 7 desse número, esperamos que o resultado seja −12, mas a resposta do computador é +6! • A razão disso é que, se começarmos de −5 em uma representação circular, e prosseguirmos sete unidades no sentido anti-horário, terminamos em +6 Normalmente, erros de overflow fazem o cál- culo parar ou retornar um número truncado que não corresponde ao resultado correto da operação, a menos que o programa tenha sido projetado para detectar essa ocorrên- cia. 52 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • O primeiro ponto a ser discutido, é o motivo da criação da notação em ponto flutuante para representar números reais • Normalmente, um computador aloca uma quantidade fixa de bits para representar a parte inteira e a parte fracionária • Por exemplo: • No sistema decimal, para um total de 16 d́ıgitos, considere o uso de uma representação em ponto fixo, com 14 posições para armazenar a parte inteira e 2 posições para armazenar a parte fracionária. A precisão de um número real é perdida se tentarmos representar um número decimal como 1,00234; o sistema armazena o número como 1,00. • No sistema decimal, considere o uso de uma representação em ponto fixo, com 10 posições para armazenar a parte inteira e 6 posições para armazenar a parte fracionária, formando um total de 16 d́ıgitos. A precisão de um número real nesse sistema é perdida se tentarmos representar um número decimal como 236154302345,00. O sistema armazena o número como 6154302345,00; a parte inteira é muito menor do que deveria ser. 53 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante + Portanto, em virtude das limitações de memória, números reais com partes inteiras muito grandes ou partes fracionárias muito pequenas não devem ser armazenados na representação em ponto fixo. Representação em ponto flutuante A solução para manter a exatidão ou a precisão é utilizar a representa- ção em pontoflutuante. Essa representação permite que o ponto decimal flutue: podemos ter diferentes quantidade de d́ıgitos à direita ou à es- querda do ponto decimal • Esta representação é mais flex́ıvel que a representação em ponto fixo e aumenta o intervalo de números reais que pode ser armazenado 54 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • Na representação em ponto flutuante, um número, seja real ou binário, é composto de três partes, conforme mostrado na figura abaixo sinal deslocador número com ponto fixo ð 1. A primeira parte é o sinal, positivo ou negativo. Asegunda mostra quantas posições o ponto decimal deve mudar para a direita ou esquerda, para formar o número propriamente dita. A terceira é uma representação em ponto fixo, em que a posição do ponto decimal é fixa 2. Nas ciências, a representação em ponto flutuante, também chamada de notação cient́ıfica, é utilizada para representar números decimais muito pequenos ou muito grandes. 55 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante ð 2. Nas ciências, a representação em ponto flutuante, tambémchamada de notação cient́ıfica, é utilizada para representar números decimais muito pequenos ou muito grandes. • Exemplo 09: Representar o número decimal 6154302345.14 em notação cient́ıfica. Resposta: 6154302345.14× 100 = 61543023.4514× 102 = . . . = 0.615430234514× 1010 + Observe que um número pode ser representado de várias formas equivalentes em notação cient́ıfica. Portanto, para uniformizar a representação da parte fixa, os métodos cient́ıficos e de ponto flu- tuante utilizam uma representação normalizada 56 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante + Observe que um número pode ser representado de várias formas equivalentes em notação cient́ıfica. Portanto, para uniformizar a representação da parte fixa, os métodos cient́ıficos e de ponto flu- tuante utilizam uma representação normalizada � Os métodos cient́ıficos (sistema decimal) e de ponto flutuante em computação (sistema binário) utilizam somente um d́ıgito à es- querda do ponto decimal. Isso é chamado de normalização • No métodos cient́ıficos (i.e. no sistema decimal), o d́ıgito à esquerda do ponto decimal pode ser um número entre 1 e 9, ou seja, o expoente (deslocamento) é escolhido de tal forma que 1 ≤ |x | ≤ 9. Por exemplo: em notação cient́ıfica, a constante de Avogadro é representada como 6.02× 1023 57 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • Na representação em ponto flutuante, um número x , seja real ou binário, é representado da seguinte forma normalizada: x = sinal(m)β × βe onde m é a mantissa, β ≥ 2 é a base e e é o expoente. • Sinal: O sinal do número pode ser armazenado utilizando 1 bit (0 ou 1) • Mantissa: é o número inteiro binário à direita do ponto decimal. Ela define a precisão do número e é armazenada em notação em ponto fixo. • Expoente: O expoente define o deslocamento do ponto decimal. Ob- serve que o expoente pode ser positivo ou negativo 58 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • Na representação em ponto flutuante, um número x , seja real ou binário, é representado da seguinte forma normalizada: x = sinal(m)β × βe onde m é a mantissa, β ≥ 2 é a base e e é o expoente. • Neste sistema de ponto flutuante, as seguintes condições devem ser verificadas: 1. m = 0.d1d2 . . . dn onde n ∈ N é o número máximo de d́ıgitos da mantissa. O valor de n é determinado pelo padrão binário da máquina. 2. 1 ≤ d1 ≤ β − 1 e 0 ≤ di ≤ β − 1 para i = 2, . . . ,n. 3. emin ≤ e ≤ emax onde emin, emax ∈ Z são números cujos valores dependem da máquina utilizada. O sistema de Excesso (ou bias) é o método utilizado para armazenar o expoente. 59 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante 1. m = 0.d1d2 . . . dn onde n ∈ N. 2. 1 ≤ d1 ≤ β − 1 e 0 ≤ di ≤ β − 1 para i = 2, . . . ,n. 3. emin ≤ e ≤ emax onde emin, emax ∈ Z são números cujos valores dependem da máquina utilizada. O sistema de Excesso (ou bias) é o método utilizado para armazenar o expoente. ð Sistema de Excesso • Neste sistema, os números inteiros positivos e negativos são armazenados como números inteiros sem sinal. • Para representar um número inteiro negativo ou positivo, um número in- teiro positivo (chamado de bias) é adicionado a cada número para deslocá- los uniformemente para o lado positivo • O valor desse bias é 2m−1−1, onde m é o tamanho de memória destinada para armazenar o expoente. 60 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • Por exemplo: para um sistema de 4 bits podemos expressar 16 números inteiros, utilizando uma posição para o 0 e dividindo os outros 15 (24 − 1 = 15) para expressar os números inteiros de -7 a 8, conforme figura abaixo. -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + Adicionando 7 unidades a cada número inteiro nesse intervalo, podemos transladar uniformemente todos os números inteiros à direita e tornar todos eles positivos, sem modificar a posição relativa dos números inteiros, um em relação ao outro, como mostra a figura acima. O sistema é chamado Excesso 7, ou representação com bias igual a 7. Para a alocação de quatro bits, o bias é 24−1 − 1 = 7, como era de se esperar. 61 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante 1. m = 0.d1d2 . . . dn onde n ∈ N é o número máximo de d́ıgitos determinado pelo tamanho da mantissa. 2. 1 ≤ d1 ≤ β − 1 e 0 ≤ di ≤ β − 1 para i = 2, . . . ,n. 3. emin ≤ e ≤ emax onde emin, emax ∈ Z são números cujos valores dependem da máquina utilizada. • Até meados da década de 80, cada fabricante de computador adotava seu próprio formato para representar números em ponto flutuante • Em 1985 o Instituto de Engenheiros Elétricos e Eletrônicos (IEEE) definiu diversos padrões para o armazenamento de números em ponto flutuante (relatório Binary Floating Point Arithmetic Standard 754) • O padrão IEEE-754 define três formatos: • Precisão simples (float - 32 bits) • Precisão dupla (double - 64 bits) • Precisão estendida (80 bits) 62 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • As especificações para precisão simples e dupla são apresentadas na Tabela abaixo Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 • Por exemplo, o formato com precisão simples utiliza um total de 32 bits para armazenar um número real na representação em ponto flutuante. • O sinal ocupa 1 bit (0 para positivo e 1 para negativo) • O expoente ocupa 8 bits (utilizando um bias de 127) • A mantissa ocupa 23 bits (número sem sinal). 63 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante 1. m = 0.d1d2 . . . dn onde n ∈ N 2. 1 ≤ d1 ≤ β − 1 e 0 ≤ di ≤ β − 1 para i = 2, . . . ,n. ... ð Obs.1: O Padrão IEEE-754 faz uma exceção à regra de normalização. Como em base binária o primeiro d́ıgito é sempre 1, a mantissa assume um 1 im- pĺıcito a esquerda do ponto decimal e, portanto, o primeiro bit da mantissa pode de fato ser zero. Esse 1 impĺıcito é referido como bit oculto e permite um ganho de precisão, pois pode-se considerar que a mantissa é armazenada em 24 bits. Porexemplo: na representação normalizada, o número 5.5 = 101.1 = 0.1011 × 23. Como a IEEE-754 assume um 1 impĺıcito à esquerda do ponto decimal, então o número 5.5 é representado como 1.011 × 22, ou seja, a mantissa é 011 e não inicia com um 1.64 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • As especificações para precisão simples e dupla são apresentadas na Tabela abaixo Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 ð Obs.2: A sequência de bits para o expoente 00000000 e 11111111 (para um formato de 32 bits) é reservado para representar o número 0 e ∞ (ou a ocorrência de erro, NaN - Not a Number), respectivamente 65 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • As especificações para precisão simples e dupla são apresentadas na Tabela abaixo Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 ð • Número 0: mantissa e expoente nulos; • Valor infinito (∞): mantissa nula e expoente (11111111)2 • Not-a-Number (Nan): mantissa não nula e expoente (11111111)2. Repre- senta um valor irrepresentável. Os elementos da mantissa não podem ser todos nulos, pois mantissa nula é usada para representar o ∞. Exemplo 0/0 66 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • As especificações para precisão simples e dupla são apresentadas na Tabela abaixo Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 Portanto, em uma arquitetura de 32 bits: • O maior expoente é representado pelo número: (11111110)2 = (254)10, ou seja, 127 + emax = 254 =⇒ emax = 127 • O menor expoente é representado pelo número: (00000001)2 = (1)10, ou seja, 127 + emin = 1 =⇒ emin = −126 67 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • As especificações para precisão simples e dupla são apresentadas na Tabela abaixo Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 ð Obs.3: Um sistema de ponto flutuante é definido pela quádrupla F (β,n, emin, emax), onde β é base, n é a precisão, emin e emax são os valores mı́nimos e máximos do expoente. A união de todos os números em ponto flutuante, juntamente com a representação do zero, constitui o sistema de ponto flutuante normalizado 68 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 ð Obs.4: Os valores da tabela acima representam o alcance e a precisão da representação. • Alcance: está relacionado ao número de bits do expoente. Quanto maior for o número de bits, maior o espectro de alcance do número. • Precisão: está relacionada ao número de bits da mantissa. Quanto maior for o número de bits, maior o número de d́ıgitos significativos que podem ser armazenados. 69 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 Portanto, não é posśıvel representar números arbitrariamente grandes ou arbitra- riamente pequenos, uma vez que emin e emax são finitos. 1. O menor positivo representável, é o real formado pela menor mantissa multiplicada pela base elevada ao menor expoente, isto é: menor+ = (0.1 00 . . . 0︸ ︷︷ ︸ n−1 vezes )× 2emin 70 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 Portanto, não é posśıvel representar números arbitrariamente grandes ou arbitra- riamente pequenos, uma vez que emin e emax são finitos. 2. O menor negativo representável, é o real formado pela menor mantissa multiplicada pela base elevada ao menor expoente, isto é: menor− = −(0. 11 . . . 1︸ ︷︷ ︸ n vezes )× 2emin 71 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 Portanto, não é posśıvel representar números arbitrariamente grandes ou arbitra- riamente pequenos, uma vez que emin e emax são finitos. 2. O maior positivo representável, é o real formado pela menor mantissa multiplicada pela base elevada ao maior expoente, isto é: maior+ = +(0. 11 . . . 1︸ ︷︷ ︸ n vezes )× 2emax 72 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 Portanto, não é posśıvel representar números arbitrariamente grandes ou arbitra- riamente pequenos, uma vez que emin e emax são finitos. 2. O maior negativo representável, é o real formado pela menor mantissa multiplicada pela base elevada ao maior expoente, isto é: maior+ = −(0.1 00 . . . 0︸ ︷︷ ︸ n−1 vezes )× 2emax 73 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 • Na precisão simples (32 bits) o número de d́ıgitos significativos (precisão p) é de aproximadamente 7 d́ıgitos decimais, pois: 2−24 = 10−p =⇒ log10(2−24) = log10(10−p) ∴ p = 24log10(2) ≈ 7.22 • Na precisão dupla (64 bits) o número de d́ıgitos significativos (precisão p) é de aproximadamente 16 d́ıgitos decimais, pois: 2−53 = 10−p =⇒ log10(2−53) = log10(10−p) ∴ p = 53log10(2) ≈ 15.95 74 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 � • No Scilab, o menor número positivo e o maior número positivo podemser obtidos através da função number_properties ◦ number_properties(’tiny’): retorna o menor número positivo normalizado ◦ number_properties(’huge’): retorna o maior número positivo normalizado ◦ number_properties(’digits’): retorna o tamanho da mantissa 75 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante Parâmetro Precisão Simples Precisão dupla número total de bits 32 64 sinal - número de bits 1 1 expoente - número de bits 8 11 mantissa - número de bits 23 52 bias - número inteiro 127 1023 � • NoScilab, o épsilon da máquina é obtido pela constante %eps. • épsilon da máquina (ou precisão da máquina): denotada por �, é a metade da distância entre 1 e o menor ponto flutuante estritamente maior que 1, ou seja: � = (1/2)β1−n ou, em outras, palavras é o menor número positivo em ponto flutuante, tal que 1 + � > 1 • Para precisão dupla � = 2−52 ≈ 2.2× 10−16 76 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • Exemplo 10: Considere o sistema F (10, 3,−2, 2), represente os números x1 = 0.35, x2 = −5.175; x3 = 0.0123, x4 = 5391.3 e x5 = 0.0003 em ponto flutuante na forma normalizada • Solução: x1 = 0.35 = 0.350× 100 x2 = −5.175 = −0.51?× 101 x3 = 0.0123 = 0.123× 10−1 x4 = 5391.3 = 0.539× 104 x5 = 0.0003 = 0.300× 10−3 + Obs.1: Observe que o número x2 = −5.175 = 0.5175 × 101 possui 4 d́ıgitos na mantissa. Se for usado truncamento, x2 será representado por 0.517 × 101; se for usado o arredondamento, x2 será representado por 0.518× 101, conforme será visto mais adiante. 77 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante • Exemplo 10: Considere o sistema F (10, 3,−2, 2), represente os números x1 = 0.35, x2 = −5.175; x3 = 0.0123, x4 = 5391.3 e x5 = 0.0003 em ponto flutuante na forma normalizada • Solução: x1 = 0.35 = 0.350× 100 x2 = −5.175 = −0.51?× 101 x3 = 0.0123 = 0.123× 10−1 x4 = 5391.3 = 0.539× 104 x5 = 0.0003 = 0.300× 10−3 + Obs.2: Observe que os números 5391.3 e 0.0003 não podem ser respresenta- dos nesse sistema. De fato, o número 5391.3 = 0.539×104 e portanto o expo- ente é maior que 2, causando overflow. Por outro lado, 0.0003 = 0.300×10−3 e assim o expoente é menor que −2 cau- sando underflow 78 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante Existe um intervalo limitado de números que podem ser representados: no caso de números em ponto flutuante, um número não poderá ser repre- sentado se o expoente e estiver fora dos limites emin e emax. Ocorrerá erro de underflow se e < emin e de overflow se e > emax menor− maior− 0 menor+ maior+ overflow underflow overflow Representável (−) Representável (+) 79 / 80 Computação Numérica • 5. Representação de números em máquina ◦ 5.3. Representação em ponto flutuante menor− maior− 0 menor+ maior+ overflow underflow overflow Representável (−) Representável (+) ð • Normalmente, erros e underflow ou overflow fazem o cálculo parar, ouretornam um número infinito (overflow), ou nulo (underflow), ou um número que não corresponde ao resultado correto da operação • Note que imprecisão é diferente de underflow, pois imprecisão está relacionada a uma limitação do número de bits da mantissa o que acarreta em uma perda de precisão do valor efetivo (arredondamento) 80 / 80 Objetivos Bibliografia Computação Numérica Introdução/Motivações Erro absoluto e Erro relativo Algarismos significativos Sistema de numeração Conversão de base Representação de números em máquina Representação de números inteiros Representação sinal-magnitude Representação em ponto flutuante
Compartilhar