Universidade Federal de Santa Catarina - Centro Tecnológico - Depto. de Informática e Estatística INE5202 Cálculo Numérico

Documentos relacionados
Cálculo Numérico. Erros em processamento Numéricos

Representação e erros numéricos

Cálculo Numérico. Conjunto de métodos utilizados para a obtenção de resultados de problemas matemáticos através de aproximações.

Cálculo Numérico IPRJ/UERJ. Sílvia Mara da Costa Campos Victer ÍNDICE. Aula 1- Introdução. Representação de números. Conversão de números

Cálculo Numérico Noções básicas sobre erros

Erros e Aritmética de ponto flutuante

Representação e erros numéricos

Universidade Federal do Espírito Santo - UFES

Representação e erros numéricos

Representação e erros numéricos

Matemática Computacional. Edgard Jamhour

Dessa forma pode-se transformar qualquer número em qualquer base para a base 10.

Cálculo Numérico Conceitos Básicos

Métodos Numéricos Erros Ponto Flutuante. Professor Volmir Eugênio Wilhelm Professora Mariana Kleina

TP062-Métodos Numéricos para Engenharia de Produção Erros-Ponto Flutuante

CCI-22. Erros Erros de arredondamento, representação e de cálculo

Arquitetura e Organização de Computadores

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano

Arquitetura e Organização de Computadores

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano.

étodos uméricos Erros Visão Geral Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano.

Erros em computações numéricas

Aula 11. A Informação e sua Representação Ponto-Flutuante. Prof. Dr. Dilermando Piva Jr.

CCI-22. Matemática Computacional. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Organização e Arquitetura de Computadores I

Modelagem Computacional. Parte 1 2

Aproximações e Erros

Disciplina: Introdução à Engenharia da Computação

Infraestrutura de Hardware

1. Converta para a base binária, usando o método das divisões sucessivas, os seguintes números inteiros: a) 13 b) 35.

Home Programa Exercícios Provas Professor Links. 2.1 Representação de um número na base dois. O número binário 101,101 significa, na base dois:

Fundamentos IV. Introdução a análise de erros. Gustavo Vinhal. August 12, Escola de Ciências Exatas e Computação

Ponto Fixo e Ponto Flutuante

Sistemas Digitais INE 5406

1. Converta para a base binária, usando o método das divisões sucessivas, os seguintes números inteiros: a) 13 b) 35. e) 347 f) 513.

CÁLCULO NUMÉRICO (CN)

Sistemas de Numeração

Métodos Numéricos - Notas de Aula

Folha Prática - Representação de Números e Erros. 1. Representar os seguintes números decimais em binário com ponto fixo:

Método Analítico. Método Numérico

Erros, Precisão Numérica e Ponto Flutuante

Fundamentos IV. Introdução a análise de erros. Clarimar J. Coelho. August 14, Departamento de Computação

Cálculo Numérico. Conceitos Básicos

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano.

Sistemas numéricos e a Representação Interna dos Dado no Computador

SME CÁLCULO NUMÉRICO I PROFESSORES MARCOS ARENALES MARISTELA SANTOS. Agosto 2011

Conceitos e Princípios Gerais

Introdução. à Ciência da. Representação de Números em Ponto Flutuante. Aula 21. Números Fracionários

Capítulo 2. Representação de números em vírgula flutuante

Aula 3 - Representação de Dados

Capítulo 1 - Erros e Aritmética Computacional

REPRESENTAÇÃO DE DADOS. Prof. Maicon A. Sartin

Universidade Federal de Uberlândia Faculdade de Computação. Representação e aritmética binária

Unidade III. Sistemas Numéricos e o Computador

ARQUITETURA DE COMPUTADORES

INTRODUÇÃO. O processo de modelagem matemática para resolver problemas reais pode ser visto pelas seguintes etapas: Escolha de um Método Adequado

MAT115 Introdução ao Processamento de Dados Professor: Ibirisol Fontes Ferreira DCC: Departamento de Ciência da Computação

Erros numéricos por Mílton Procópio de Borba

Aula 4: Bases Numéricas

ERRO DE ARREDONDAMENTO E TRUNCAMENTO

Números binários e erros

Cálculo Numérico - Mat 215. Prof. Dirceu Melo. Prof. Dirceu Melo - MAT215

Estudo de erros Erros na fase de modelagem: 1.2. Erros na fase de resolução:

Aula 9: Estouro e Representação em Ponto Flutuante

Organização de Computadores I

Teoria de erros. Computação Teoria de erros Porquê?

Aula 9: Estouro e Representação em Ponto Flutuante

1.1 Etapas na solução de um problema. 1.3 Tipos de erros. 1.4 Aritmética de ponto flutuante.

Baseado nos slides de Anna Tostes SISTEMA NUMÉRICO

Circuitos Lógicos. Prof. Odilson Tadeu Valle

Arquitetura de Computadores

Cálculo numérico Cálculo numérico - O Cálculo Numérico é uma metodologia para resolver problemas matemáticos através do computador. - Uma solução obti

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano

Sistemas de Computação. Representação em Ponto Flutuante

SISTEMA DE NUMERAÇÃO. Introdução a Informática. Vinícius Pádua

Sistemas de Numeração. Exemplos de Sistemas de Numeração (1) Exemplos de Sistemas de Numeração (2) Sistemas de Numeração

Aula 4: Bases Numéricas

PARTE I I: ARITMÉTICA COMPUTACIONAL ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Estouro e Representação em Ponto Flutuante

Números Binários. Apêndice A V1.0

Aritmética dos Computadores

Notas de Aula Guilherme Sipahi Arquitetura de Computadores

Organização de Computadores I

Representação de números Conversão de base b para base 10

ARQUITETURA DE COMPUTADORES

Introdução à Computação

Operações com números binários

Números são números, letras são números e sinais de pontuação, símbolos e até mesmo as instruções do próprio computador são números.

Noções sobre Erros em Matemática Computacional

a base da potência usada coincide com a base do sistema de numeração.

Cálculo Numérico. que é denominado erro relativo. Temos então para os dados acima:

Tópicos. - Cálculo numérico. - Representação de números. - Análise e representação de erros

Representação de números - Conversão de base b para base 10

3/14/2012. Programação de Computadores O Computador. Memória Principal representação binária

Códigos Especiais. Tiago Dezuo DEE - Engenharia Elétrica CCT. ALB0001 Álgebra de Boole JOINVILLE

Representação de números - Conversão de base b para base 10

Cálculo Numérico Faculdade de Ciências Sociais Aplicadas e Comunicação FCSAC Faculdade de Engenharia, Arquiteturas e Urbanismo FEAU

Transcrição:

UFSC INE5202-12 Universidade Federal de Santa Catarina - Centro Tecnológico - Depto. de Informática e Estatística INE5202 Cálculo Numérico Cap. 1) Erros Numéricos Principais fontes deste material: Faires & Burden, Numerical Analysis, 9th ed., Brooks/Cole, 2011. (Nro BU/UFSC: 519.6 B949n) Cheney & Kincaid, Numerical Mathematics and Computing, 6th ed., Thomson Brooks/Cole, 2008. (Nro BU/UFSC: 519.6 C518n) Recktenwald, Numerical Methods with Matlab, Prentice-Hall, 2000. Wikipedia e outras fontes da Internet Alguns tipos de falhas em sistemas computacionais estão fora do escopo da Computação Numérica: Falhas de hardware Dados mal informados (incerteza na entrada) Erros lógicos em software: Programas matemáticos estão sujeitos a bugs, como qualquer software. Mas há erros específicos da Computação Numérica que são inevitáveis: Arredondamento: quando dígitos à direita do ponto são descartados. Há um limite de memória para o armazenamento de qualquer nro. Truncamento: quando processos que deveriam ser repetidos infinitas vezes são substituídos por finitos. Queremos construir algoritmos para problemas numéricos que sejam insensíveis aos erros de arredondamento; cujo erro de truncamento fique abaixo de uma tolerância prescrita. Números em computadores (bits e bytes) Representação de nros no computador(trechos de material da Profa. Nolan, Berkeley) Quando entramos um número em um computador: Não é realmente preciso saber como ele será representado na máquina; Podemos supor que seu significado é preservado, quando este nro é mapeado do nosso problema para o computador. No entanto, já que pretendemos realizar computações numéricas: Temos, no mínimo, que entender o que pode dar errado; Temos que lidar com os casos especiais que podem levar a resultados errados. Lições desta seção (Trechos de material da Profa. Nolan, Berkeley) Representar nros reais em um computador quase sempre envolve uma aproximação e uma perda de dígitos em potencial Testar a igualdade de dois nros reais em um computador não faz sentido: Aproximações podem fazer com que nros iguais tenham representações diferentes Teste melhor: Diferença entre eles < Menor nro discernível naquela máquina?

UFSC INE5202-13 Nros podem vir a ser muito pequenos ou muito grandes : Pode ocorrer overflow ou underflow (não existem na matemática abstrata) A ordem das operações pode ser importante Quanto mais espaço usamos para representar um nro: Mais precisa é a representação; Mas: mais memória é consumida. Para entender estes pontos, precisamos ver como nros são representados em computadores. Começaremos com o tipo básico: um inteiro. Antes: modo como a informação é armazenada em um computador... Números em computadores Computadores usam precisão finita : Quantidade fixa de dígitos para representar um nro. Facilita gerenciamento da memória. Permite cálculos mais rápidos. Bits e bytes (Trechos de material do Prof. Paul Murrell, www.wu.ac.at) Computadores são dispositivos binários: Menor unidade de informação tem dois estados ( 0 e 1 ). Naturalmente: manipulam números binários (em base 2). Bit: um dígito binário (um 0 ou um 1 ). Byte: grupo de 8 bits. Palavra ( word ): nro de bits processados por vez (32 ou 64). Ex.: 00100101 01010000 01000100 01000110 word byte bit No nível mais baixo, um conjunto de dados é apenas algo assim: 00100101 01010000 01000100 01000110 00101101 00110001 00101110 00110100 00001010 00110101 00100000 00110000 00100000 01101111 01100010 01101010 00001010 00111100 00111100 00100000 00101111 01010011 00100000 Número de bytes e palavras usados para cada nro depende de: formato + sistema operacional + hardware Na maior parte dos casos: uma letra ocupa 1 byte (código ASCII ) um inteiro ocupa uma palavra (word) um real ocupa uma ou duas palavras (depende do formato) Exemplos: a letra A (código ASCII 65) ocupa 1 byte: 01000001 o texto erros ocupa 5 bytes o texto 12345 ocupa 5 bytes também o inteiro 12345 ocupa 4 bytes (1 palavra) (assim como o inteiro 12345678 ) o real 123.45 ocupa 4 ou 8 bytes (assim como o real 0.000012345678 )

UFSC INE5202-14 Bits e bytes e Números Basicamente, 2 tipos de números: inteiros e reais (ou complexos). Identificados por símbolos (12, π, 5.67, ). Durante processamento: valores precisam ser armazenados na memória. Requer tradução do formato simbólico para bits. Tradução é restrita pelo nro de bits disponível para cada tipo de nro. Inteiros simbólicos são trocados por inteiros com faixa limitada de valores. Reais simbólicos (exatos) correspondem a números de ponto flutuante: com faixa limitada de valores e nro limitado de dígitos. Representações de números em bases diferentes Um erro numérico pode ocorrer simplesmente porque: Dados são informados ao computador em base 10 (decimal) Mas o computador processa nossos dados em base 2 Necessário conhecer representações de nros em outras bases, além da decimal 1.1) Bases - Definições Def.: Sistema de Numeração: Regras para representar quantidades matemáticas (números). Def.: BASE: Quantidade de símbolos utilizados. Ex.: o sistema decimal (base 10) usa 10 símbolos Notação decimal: Cada dígito representa coeficiente de potência de 10: 329.75 = 3 10 2 + 2 10 1 + 9 10 0 + 7 10-1 + 5 10-2 Valor do dígito depende da sua posição no número Em geral: a n a n-1...a 1 a 0.b 1 b 2 b 3 = a n 10 n + a n-1 10 n-1 + + a 1 10 1 + a 0 + b 1 10-1 + b 2 10-2 + b 3 10-3 + Parte inteira: a n a n-1...a 1 a 0 Parte fracionária: b 1 b 2 b 3 Base β qualquer: dígitos representam potências de β (a n a n-1...a 1 a 0.b 1 b 2 b 3 ) β = a n β n + a n-1 β n-1 + + a 1 β 1 + a 0 + b 1 β -1 + b 2 β -2 + b 3 β -3 + Dígitos: 0, 1, 2,, β-2, β-1 Se β>10: acrescentar símbolos para 10, 11,, β-1 Ex.: símbolos da base β=16: {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} Exemplos: (110.01) 2 = 1 2 2 + 1 2 1 + 0 2 0 + 0 2-1 + 1 2-2 (75.4) 8 = 7 8 1 + 5 8 0 + 4 8-1 (A5.48) 16 = A 16 1 + 5 16 0 + 4 16-1 + 8 16-2

UFSC INE5202-15 1.2) Geração de números base 10 base 2 base 16 0 0 0 1 1 1 2 10 2 3 11 3 4 100 4 5 101 5 6 110 6 7 111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F 16 10000 10 17 10001 11 1.3) Conversão de base β para base 10 N = (a na n-1...a 1a 0. b 1b 2b 3...) β = a nβ n + a n-1β n-1 + + a 1β 1 + a 0 + b 1β -1 + b 2β -2 + b 3β -3 + Resumo: escrever na forma de série de potências e efetuar os cálculos em base 10. Exemplos (β 10): (110.01) 2 = 1 2 2 + 1 2 1 + 0 2 0 + 0 2-1 + 1 2-2 = 4 + 2 + 0 + 0 + 0.25 = 6.25 10 (75.4) 8 = 7 8 1 + 5 8 0 + 4 8-1 = 56 + 5 + 0.5 = 61.5 10 (A5.48) 16 = A 16 1 + 5 16 0 + 4 16-1 + 8 16-2 = 160 + 5 + 0.25 + 0.03125 = 165.28125 10 Ou, usando recursos prontos do Octave: (110.01) 2 = bin2dec( 11001 )/4 = 6.25 10 (75.4) 8 = base2dec( 754,8)/8 = 61.5 10 (A5.48) 16 = hex2dec( A548 )/16 2 = 165.28125 10 (5631) 7 = base2dec( 5631,7) = 2031 10 (6A3B1) 13 = base2dec( 6A3B1,13) = 193987 10 1.4) Conversão de base 10 para base β

UFSC INE5202-16 Parte inteira (10 β): Dados um número N em decimal e uma nova base β: Escreve-se N em função dos coeficientes a determinar na nova base: N10 = (c mc m-1...c 1c 0.) β onde, para todos os c k, vale: 0 c < β k Então: N 10 = (c mc m-1...c 2c 1c 0.) β = c 0 + c 1β + c 2β 2 + + c m-1β m-1 + c mβ m Logo, se N 10 é dividido por β : o resto é: c 0 o quociente é: ( c 1 + c 2β + + c m-1β m-2 + c mβ m-1 ) Agora, se este quociente é dividido por β : o novo resto é: c 1 = c 0 + β( c 1 + c 2β + + c m-1β m-2 + c mβ m-1 ) o novo quociente é: ( c 2 + c 3β + + c m-1β m-3 + c mβ m-2 ) E assim por diante Resumo: dividir repetidamente por β, guardando os restos c 0, c 1, c 2, e os quocientes Ex.: efetuar a conversão: (37.) 10 = (100101.) 2 = 2 0 + 2 2 + 2 5 (OK) 37 2. 1 18 2 0 9 2 1 4 2 0 2 2 0 1 2 1 0 (FIM) Algoritmo em linguagem Octave (uma implementação possível): function Nb = dec2beta_int(n, b) Nb = []; while N!= 0 r = mod(n, b); Nb = [Nb, r]; N = floor(n/b); end Nb = fliplr(nb); Ou, usando recursos prontos do Octave: 100 10 = dec2bin(100) = 1100100 2 100 10 = dec2hex(100) = 64 16 100 10 = dec2base(100,8) = 144 8

UFSC INE5202-17 Parte fracionária (10 β): Dado um nro x < 1 em decimal e uma nova base β: x 10 = (0.d 1 d2 d3... ) β = d1 β-1 + d 2 β-2 + d 3 β-3 + Ex. auxiliar: (0.375) 10 = (0.????) 10 Como obter os dígitos (coeficientes) um a um? Note que: 0.375 10 = 3.75 extrai-se o 1ro dígito (3) sobra : 0.75 10 = 7.5 extrai-se o 2do dígito (7) sobra : 0.5 10 = 5 extrai-se o 3ro dígito (5) Logo: (0.375) 10 = (0.375) 10 Ou seja, em base 10: Uma vez que nros são séries de potências de 10, O ponto decimal é movido pela multiplicação ou divisão por 10 Logo, em base β: O ponto decimal é movido pela muliplicação ou divisão por β Então: βx = (d 1. d2 d3 ) β = d 1 + d 2 / β + d3 / β2 + Parte inteira do resultado é o coeficiente d 1 Repete-se o processo sobre a parte fracionária que resta : (0. d 2 d3 ) β para encontrar d 2 E assim sucessivamente (!!) Resumo: multiplicar repetidamente por β, removendo partes inteiras. Exemplo1: (0.375) 10 = (0.011) 2 = 2-2 + 2-3 (OK) 0.375 x 2 = 0.75 0.75 x 2 = 1.50 0.50 x 2 = 1.00 0.00 (FIM) Exemplo2: (0.375) 10 = (0.12) 4 = 4-1 + 2x4-2 (OK) 0.375 x 4 = 1.50 1.50 x 4 = 2.00 0.00 (FIM) Teorema ( Expansão em base β ): Seja α um real positivo. Seja a sua parte inteira: a = α Seja a sua parte fracionária: γ = α - a (0 γ < 1) Então γ pode ser escrito de maneira única como: γ = (.d 1 d 2 d 3...) β = j=1 d j β j (0 d j β-1)

UFSC INE5202-18 Prova: método anterior para a construção dos d j s (γ 0 = γ): γ = d 1 β 1 + d 2 β 2 + + d n β n + γ n β n onde: d k = βγ k-1 e γ k = βγ k-1 - d k Ref.: Rosen, Elem. Number Theory. Algoritmo (!!) em linguagem Octave para a conversão de um fracionário de base 10 para a base β (na verdade, não é algoritmo!): function xb = dec2beta_frac(x, b) xb = []; while x!= 0 ATENÇÃO: sem garantia de parada x = x * b; d = floor(x); x = x d; end xb = [xb, d]; 1.5) Frações decimais em base β Dado um nro x < 1 em decimal e uma nova base β: x 10 = (0.d 1 d2 d3... ) β = d k : coeficientes a determinar Resumo: multiplicar repetidamente por β, removendo partes inteiras. Exemplo 3: (0.1) 10 = (0.0 0011 0011 0011...)2 0.1 x 2 = 0.2 0.2 x 2 = 0.4 0.4 x 2 = 0.8 0.8 x 2 = 1.6 0.6 x 2 = 1.2 0.2 x... (tem que parar, pois entra em ciclo) Conclusão: A representação de um fracionário decimal em outra base β pode não terminar. Nros fracionários com representação finita em decimal podem se tornar dízimas periódicas em outras bases. (Mas: apenas um nro finito de dígitos poderá ser guardado.) Def.: Uma expansão (.d 1d 2d 3...) β termina se n Z + tal que: d n = d n+1 = d n+2 = = 0 Ex.: expansões que terminam: 1/8 em base 10: (.125000...) 10 = (.125) 10 4/9 em base 6: (.24000...) 6 = (.24) 6 Questão: quais os reais cuja expansão em base β termina??

UFSC INE5202-19 Teorema: A expansão em base β do real 0 α < 1 termina sse α é racional e pode ser escrito como α = r/s, onde: 0 r < s todo fator primo de s divide β Prova: ( ) Assuma que a expansão termina, ou seja: α = (.d 1d 2...d n) β. Então: α = d 1 β + d 2 1 β + + d n 2 β n = d 1β n 1 + d 2 β n 2 + + d n β n Logo, α é racional e: denominador é divisível por primos que dividem β. Prova: ( ) Assuma que: α = r/s e cada primo que divide s também divide β Então: (existe) potência de β (= β N ) que é divisível por s Exemplo: N = maior expoente na fatoração de s Daí: β N α = β N (r / s) = a r (onde a é inteiro e positivo) Agora, seja a expansão de a r dada por (g mg m-1...g 1g 0) β : α = a r β N = g mβ m +g m 1 β m 1 + +g 1 β+g 0 β N = g m β m N +g m 1 β m 1 N + +g 1 β 1 N +g 0 β N = (.00...0 gmgm-1...g1g0) β (a expansão termina) Expansões em base β que não terminam podem ser periódicas: 1/3 = (.3333 ) 10 1/6 = (.1666 ) 10 1/7 = (.142857142857142857 ) 10 Def.: (0.d 1d 2...d n) β é periódica se N,k Z + tais que: d n+k = d n para todo n N Notação para a expansão periódica: (0.d 1d 2...d N-1d N...d ) N+k-1 β 1/3 = (0.3) 10 1/6 = (0.16) 10 1/7 = (0.142857) 10 1/10 = (0.00011) 2 Teorema: Racionais = Reais com expansões em base β periódicas ou finitas. Prova: ver livro de Teoria de Números (ex.: Rosen, Elem. Nr Theory ) 1.6) Conversão entre as bases 16 e 2 Dígitos na base 16: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F Grupos de 4 bits podem ser traduzidos diretamente para hexadecimal (pois: 2 4 = 16) Exemplos: 1. (1101011.0111101) 2 =(0110 1011.0111 1010) 2 =(6B.7A) 16 2. (1A2.4) 16 = (0001 1010 0010.0100) 2 = (110100010.01) 2

UFSC INE5202-20 Justificativa: x = (0.b 1b 2b 3b 4b 5b 6b 7b 8...) 2 = = (b 12-1 + b 22-2 + b 32-3 + b 42-4 ) + (b 52-5 + b 62-6 + b 72-7 + b 82-8 ) + = (b 12 3 + b 22 2 + b 32 1 + b 4)16-1 + (b 52 3 + b 62 2 + b 72 1 + b 8) 16-2 +... Utilidade: compactar a representação da memória: 1 único caractere hexadecimal equivale a 4 bits de modo que: cada byte de memória apenas 2 caracteres hexa Exemplo: dump do texto hexadecimal : 68657861646563696d616c0a Representação digital dos inteiros Bits e números(trechos de material do Prof. Paul Murrell, www.wu.ac.at) Relembrando: Um bit: dois estados possíveis: só podemos representar os nros 0 e 1. Dois bits combinados: Cada bit: dois estados 4 estados possíveis; Podemos representar: 0, 1, 2 e 3 (00, 01, 10 e 11) k bits combinados: 2 k estados possíveis: 0, 1, 2,, 2 k -1 Inteiros são comumente armazenados em: 4 bytes ( int ) : 0..4,294,967,295 (0..2 32-1) 8 bytes ( long long int ): 0..18,446,744,073,709,551,615 (0..2 64 1) Todos os inteiros de um mesmo tipo requerem a mesma quantidade de memória computacional. Exemplo: o nro 193 seria (em formato usual): 00000000 00000000 00000000 11000001 Alguns problemas evidentes: 1. Desperdício de espaço: 8 bits seriam suficientes para guardar o 193: Mas: nro pré-fixado de bits permite computações em hardware (+eficiente). 2. Não permite números negativos: Resolvido com o sacrifício de um bit para indicar o sinal. A faixa se torna (usando complemento de 2 - ver Wikipedia): -2,147,483,648.. 2,147,483,647 ou: -(2 31 ).. 2 31-1 3. Números grandes ( 2 32 ) não podem ser guardados em uma palavra. Problema inerente do uso de memória finita. É possível alocar mais memória, mas ao custo de eficiência. Sobre os inteiros, o que precisamos lembrar: Existem limites superiores e inferiores para a faixa de inteiros usualmente colocados à nossa disposição.

UFSC INE5202-21 Representação digital dos reais (ponto flutuante) Nros de ponto flutuante são as representações digitais de nros que têm partes fracionárias. Reais (e racionais) são muito mais difíceis de armazenar do que os inteiros. Há um limite na precisão que podemos conseguir. Maioria dos reais não pode ser armazenada de maneira exata. Porém: um valor próximo ao verdadeiro pode ser guardado. Problema é com a realização de muitos cálculos: Erros pequenos podem acumular e estragar resultados. Números normalizados Nros reais não podem ser guardados em um computador como os inteiros. (Para começar, não são contáveis.) Eles são armazenados em um equivalente da notação científica. Chamado de Notação de ponto flutuante. Números decimais normalizados Um nro pode ser escrito em notação científica de diversas formas: 123.456 = 123.456 10 0 = 0.123456 10 3 = 1.23456 10 2 = A diferença é somente a posição do ponto decimal na mantissa. (Mantissa: nro que multiplica a potência de 10.) Adotaremos a seguinte normalização: 1ro dígito à esquerda do ponto sempre será 0; 1ro dígito à direita do ponto nunca será 0. Números decimais normalizados em notação científica: y = ±(0.d 1d 2 d kd k+1d k+2...) 10 n Exemplos de números representados com esta normalização: Valor Notação normalizada 37.2 0.372x10 2 0.000002278567 0.2278567x10 5 22785670 0.2278567x10 9 5 0.5x10 1 Fixando o tamanho da mantissa, obtemos nros de ponto flutuante (ou números de máquina ): Def.: Números de ponto flutuante decimais: ±(0.d 1d 2 d k) 10 n d i são os dígitos decimais da mantissa (d 1 1) n é o expoente (n min n n max ) k é a precisão O equivalente para base 2 é: Def.: Números de ponto flutuante binários: ±(0.b 1b 2 b n) 2 2 e b i : dígito binário (bit) (b 1 = 1) e : expoente binário (e min e e max) n : precisão O zero foge à normalização e precisa ser definido como: zero = 0.00...0 2 e min

UFSC INE5202-22 A união dos nros binários normalizados com o zero é representada por: F(β, n, e min, e max) máquina (β = 2 ou 10) Exemplo: Representar (25) 10 na máquina F(2,10,-15,15). Nros representáveis nesta máquina: (0.d 1 d 2 d 3 d 4 d 5 d 6 d 7 d 8 d 9 d 10 ) 2 2 ±(e e e e ) 1 2 3 4 2 Solução: 25 = 16 + 8 + 1 = 2 4 + 2 3 + 2 0 = (11001.) 2 = (0.11001) 2 2 5 = +(0.1100100000) 2 2 +(0101) ou, de forma mais compacta: 0 1100100000 0 0101 sinal mantissa sinal expoente Esta máquina usa 16 bits para para representar qualquer número. Qual o maior valor representável nesta máquina? 0 1111111111 0 1111 = +(0.1111111111) 2 2 +(15) = (111111111100000.) 2 = (32736) 10 Qual o menor valor positivo representável nesta máquina? 0 10000000000 1 1111 = +(0.1000000000) 2 2 -(15) = 2 -(16) = (0.0000152587890625) 10 Da mesma forma: Menor valor representável nesta máquina = -(32736) 10 Maior valor negativo representável = -(0.0000152587890625) 10 Logo, esta máquina possui os seguintes limites: -32736-1.5x10-5 0 1.5x10-5 +32736 ------------ ============== ------------ ------------ ================ ------------------> (R) overflow faixa utilizável underflow underflow faixa utilizável overflow Região de overflow: (-, -32736) (+32736, + ) Região de underflow: (-1.52587890625x10-5, 0) (0, +1.52587890625x10-5 ) Ainda: qual o segundo menor valor positivo representável nesta máquina? 0 10000000001 1 1111 = +(0.1000000001) 2 2 -(15) = 2 -(16) + 2 -(25) = (0.0000152885913849) 10 Logo, esta máquina não possui representação exata para os reais entre: +0.0000152588 e 0.0000152886 e para muitos outros Conclusão: em um computador, o sistema de números não é contínuo, mas um conjunto discreto peculiar: um sub-conjunto dos racionais.

UFSC INE5202-23 Números de ponto flutuante IEEE-754 Os nros de ponto flutuante em uma máquina real seguem a norma IEEE-754-1985, revisada em 2008 Def.: Um nro de ponto flutuante IEEE-754 tem a forma (1.)m 2 c, onde: m é a mantissa: sem o 1. inicial (pois o 1. sempre aparece) c é o expoente (ou característica ): modificado por uma polarização (ou bias ) IEEE-754 especifica formatos para precisão simples e precisão dupla. Precisão simples: nros armazenados em 32 bits 23 bits para a mantissa (com 1. implícito) 8 bits para expoente + 127 (127 = bias ou polarização ) 1 bit de sinal Expoente de 8 bits poderia representar 256 valores Mas precisamos de valores pequenos expoentes negativos Expoentes vão de 0 a 255 (na verdade: de -127 a +128, com o bias ) -127 (=00000000) reservado para nros muito pequenos (fora do padrão) +128 (=11111111) reservado para nros que não fazem sentido ( NaN, Inf ) Exemplo (Wikipedia): O nro 0.15625 é assim representado como ponto flutuante IEEE-754 em precisão simples: +0.15625 10 = 0.00101 2 = (1.)01 2 2-3 sinal + => s = 0 mantissa (fraction) = f =.01 00000 00000 00000 00000 0 expoente = c = -3 + bias = -3 + 127 = 124 = (01111100) 2 Formato geral: (-1) s 2 c - 127 (1. + f) Maior nro representável: (-1) 0 2 254-127 (1.111...111) 2 3.40 10 38 Menor nro representável: (-1) 0 2 1-127 (1.000...000) 2 1.18 10-38 Underflow ( denormals ): (-1) 0 2 0-126 (0.bbb...bbb) 2 (zero f 0) Overflow e outros: (-1) 0 2 255-127 (1.bbb...bbb) 2 Inf, NaN Nota sobre a precisão simples: Note que, com 23 bits, é possível representar 2 23 valores diferentes Este é um grande nro de valores (~8 400 000), mas ainda ficam muitos buracos descobertos

UFSC INE5202-24 Por exemplo, se estivermos lidando com valores na faixa de 0 a 1: a distância entre valores representáveis é (1/2) 23 10-7 ou seja: não conseguiremos distinguir entre nros cuja diferença seja menor do que 10-7... Precisão dupla: nros armazenados em 64 bits 53 bits para a mantissa 11 bits para: expoente + 1023 ( bias ou polarização ) 1 bit de sinal Expoente de 11 bits poderia representar 2048 valores Mas: precisamos de expoentes negativos bias = 1023 Expoentes vão de 0 a 2047 (na verdade: de -1023 a +1024 ) -1023 (=000...000) reservado para nros muito pequenos (fora do padrão) +1024 (=111...111) reservado para nros que não fazem sentido ( NaN, Inf ) Precisão dupla: (Wikipedia) Formato geral: (-1) s 2 c - 1023 (1. + f) Maior nro representável: (-1) 0 2 2046-1023 (1.+(1-2 -52 )) 2 1.798 10 308 Menor nro representável: (-1) 0 2 1-1023 (1.000...000) 2 2.225 10-308 Underflow ( denormals ): (-1) 0 2 0-1022 (0.bbb...bbb) 2 (zero f 0) Overflow e outros: (-1) 0 2 2047-1023 (1.bbb...bbb) 2 Inf, NaN Exemplo com precisão dupla (Faires): Considere o nro de máquina: 0 10000000011 1011100100 0100000000 0000000000 0000000000 0000000000 00 s < c > < f > Bit mais à esquerda = s = 0 => nro é positivo Expoente = c = 10000000011 2 = 1027 Mantissa = f = 0.101110010001 2 = 2-1 + 2-3 + 2-4 + 2-5 + 2-8 + 2-12 Logo, este nro de máquina vale: (-1) 0 2 1027-1023 (1 + 2-1 + 2-3 + 2-4 + 2-5 + 2-8 + 2-12 ) = 27.56640625 10 Octave (Matlab) usa precisão dupla por default. Exercício: observar novamente os valores das variáveis built-in realmin e realmax do Octave.

UFSC INE5202-25 Faixas utilizáveis para tipos mais comuns de dados em computador: Tipo de dado Faixa de utilização int32 (32 bits) -2,147,483,648 n 2,147,483,647 int64 (64 bits) -9,223,372,036,854,775,808 n 9,223,372,036,854,775,807 precisão simples (sem denormals ) precisão dupla (sem denormals ) -3.40 10 38 x -1.18 10-38, 0, 1.18 10-38 x 3.40 10 38-1.798 10 308 x -2.225 10-308, 0, 2.225 10-308 x 1.798 10 308 Medidas de erros numéricos Formas de Arredondamento Arredondamentos ocorrem quando é necessário descartar dígitos. Tanto decimais como binários. Formas de arredondamento: Cancelamento Arredondamento Arredondamentos em decimais Nros decimais positivos normalizados em notação científica: y = (0.d 1 d 2 d k-1 d k d k+1 d k+2...) 10 n onde: d 1 1, 0 d j 9 (i 2) Def.: Forma em ponto flutuante decimal de y: fl(y) = (0.δ 1 δ 2 δ k-1 δ k ) 10 n onde: δ 1 1, 0 δ j 9 (i 2) 0.δ 1 δ 2 δ k-1 δ k depende de d k+1 A mantissa termina em k dígitos. Dois métodos para terminar a mantissa: Cancelamento: simplesmente corta fora a parte dk+1dk+2 Arredondamento: faz y y + 0.5 10 n-k e aplica cancelamento a y, ou seja: se d k+1 < 5: simplesmente corta a parte d k+1 d k+1 ( para baixo ) se d k+1 5: 0.δ 1 δ 2 δ k 0.d 1 d 2...d k + 10 -k antes de cortar a parte d k+1 d k+1 ( para cima )

UFSC INE5202-26 Exemplo: π = 3.14159265358979 Na forma decimal normalizada: π = 0.314159265358979 10 1 Como ponto flutuante: com cancelamento para 5 algarismos: fl(π) = 0.31415 10 1 com arredondamento para 5 algarismos, temos: π + 0.5 10 1-5 = 0.314164265358979 10 1 fl(π) = 0.31416 10 1 Arredondamentos em binários Nros binários positivos normalizados em notação científica: y = (0.b 1 b 2 b k-1 b k b k+1 b k+2...) 2 n, onde: b 1 =1, b j = 0 ou 1 (i 2) Def.: Forma em ponto flutuante binária de y: fl(y) = (0.δ 1 δ 2 δ k-1 δ k ) 2 n, onde: δ 1 =1, δ j = 0 ou 1 (2 i k) 0.δ 1 δ 2 δ k-1 δ k depende de b k+1 A mantissa termina em k bits. Dois métodos para terminar a mantissa: Cancelamento: simplesmente corta fora a parte b k+1 b k+2... Arredondamento: faz y y + 0.1 2 n-k e aplica cancelamento a y, ou seja: se b k+1 = 0: simplesmente corta a parte b k+1 b k+1 ( para baixo ) se b k+1 = 1: 0.δ 1 δ 2 δ k 0.b 1 b 2...b + k 2-k antes de cortar a parte b k+1 b k+1 ( para cima ) Exemplo: z = 1001110.11010110 Na forma binária normalizada: z = 0.100111011010110 2 7 Como ponto flutuante: com cancelamento para 5 algarismos: fl(z) = 0.10011 2 7 com arredondamento para 5 algarismos, temos: z + 0.1 2 7-5 = 0.101000011010110... 2 7 fl(z) = 0.10100 2 7 Algarismos Significativos: (Wikipedia) Seja um nro decimal normalizado: Algarismos 1 a 9 são sempre significativos; Zeros entre algarismos não nulos são sempre significativos; Zeros à direita de todos os não-nulos, na parte fracionária, não são significativos, a menos que sirvam para caracterizar precisão.

UFSC INE5202-27 Exemplos: 0.583 10-7 => 3 algarismos significativos 0.40000560 10 3 => 7 algarismos significativos 0.3500000 10 2 => 2 algarismos significativos 0.350000 10 2 => 6 algarismos significativos, se: precisão = 6 Def.: Seja p* uma aproximação para p: Erro absoluto = p p* Erro relativo = p p* / p (para p 0) Exemplos: p p* e ABS e REL 0.3000 10 1 0.3100 10 1 0.1 0.3333 10 1 0.3000 10-3 0.3100 10-3 0.1 10-4 0.3333 10 1 0.3000 10 4 0.3100 10 4 0.1 10 3 0.3333 10 1 O erro absoluto é mais usado em deduções teóricas. Na prática, o erro relativo é mais significativo, pois leva em consideração as magnitudes envolvidas. Aproximações em decimais (Faires) Suponha que foi feito arredondamento correto para k dígitos: Notação científica: y = (0.d 1 d 2 d k-1 d k d k+1 d k+2...) 10 n Ponto flutuante: fl(y) = (0.δ 1 δ 2 δ k-1 δ k ) 10 n Então: e A = y fl( y) = 0.d 1 d 2 d k d k+ 1 d k +2 10 n 0.δ 1 δ 2 δ k 10 n = 0. d k +1 d k+ 2 10 n k 0.5 10 n k => se d k+1 < 5 = 0. d k +1 d k+ 2 10 n k 10 n k 0.5 10 n k => se d k+1 5 Em ambos os casos: distância entre y e fl(y) é 0.5 no k-ésimo dígito da mantissa. Exemplo: Considere os arredondamentos a seguir, para p = 2/3 = 0.66666 : p* e A = y - fl(y) k máx OBS.: 0.665 0.001667... 2 dos 3 dígitos mostrados, apenas 2 são resultado de arredondamento correto 0.666 0.000666... 2 3 dígitos mostrados, apenas 2 vêm de arredondamento correto 0.667 0.000333... 3 os 3 dígitos mostrados foram corretamente arredondados 0.668 0.001333... 2 dos 3 dígitos mostrados, apenas 2 vêm de arredondamento correto Por outro lado, se: distância entre y e fl(y) é 0.5 no k-ésimo dígito da mantissa, sabemos que: os k 1 os dígitos de fl(y) coincidem com os k 1 os dígitos de um arredondamento correto de y Logicamente: se y for arredondado para k dígitos na mantissa, o resultado deve ser fl(y).

UFSC INE5202-28 Porém, dados y e z quaisquer, não podemos afirmar que: Se: y-z 0.5 no k-ésimo dígito da mantissa, Então: y arredondado para k dígitos deve coincidir com z arredondado para k dígitos. (Contra-)exemplo: Sejam y=0.66666 e z=0.662: Então: y z = 0.4666 10-2 0.5 10-2 Mas: fl 2(y) = 0.67 fl 2(z) = 0.66 No entanto, note que podemos ainda garantir que: A menos da posição k, as mantissas de fl(y) e fl(z) serão iguais. De uma maneira geral, dados y e z quaisquer, podemos afirmar que: Se: y-z 0.5 no k-ésimo dígito da mantissa Então: os 1ros k-1 dígitos de y arredondado para k dígitos devem coincidir com: os 1ros k-1 dígitos de z arredondado para k dígitos. Ou seja, no caso de y e z quaisquer, podemos afirmar que, se: e A = y z 0.5 10 n k Então, como aproximação para y, o nro z teria, no mínimo, t=k-1 dígitos significativos corretos. Trabalhando com erro relativo, podemos eliminar dependência de n: e R = y z y = e A n 0.d 1 d 2 10 0.5 10 k 0.d 1 d 2 0.5 Logo: e R = y z y 0.5 10 t Este raciocínio leva à definição a seguir. +1) 10 (t 0.1 Def.: Dados y e z quaisquer, definimos t como o maior inteiro para o qual: e R = y z y 0.5 10 t Ou seja: t = log 10 (2 e R ) Então: z é uma aproximação para y com, no mínimo, t dígitos corretos. Exemplo: Considere as aproximações a seguir, para p = π = 3.14159265 : p* t 0.3141 10 1 3 0.315 10 1 2 0.31416 10 1 5 Usaremos o erro relativo, na forma de nro de dígitos corretos, nos critérios de convergência para os algoritmos iterativos que veremos: O processo iterativo só terá convergido quando: nro de dígitos corretos em cada iteração > valor estipulado.

UFSC INE5202-29 Aproximações em máquinas binárias(kincaid) Qual o máximo erro relativo que pode ser cometido no arredondamento em uma máquina? Exemplo: Arredondamento de x = (0.1a 2 a 3 a 4..a 24 a 25 a 26...) 2 2 m na máquina F(2,24,-127,128). Os 2 nros de máquina mais próximos de x são x e x : x x x 1. arredondando para menos : x = (0.1a 2 a 3 a 4..a 24 ) 2 2 m 2. arredondando para mais : x = [(0.1a 2 a 3 a 4..a 24 ) 2 +1 2-24 ] 2 m 3. o nro de máquina mais próximo é escolhido para representar x Mas qual o máximo erro de arredondamento neste caso? Supondo que x está mais próximo de x do que de x : x x x Neste caso, o erro é dado por: x x ' 1 2 x' ' x ' = 1 2 (2 24+m ) = 2 25+m o que leva a um erro relativo máximo de: x x' x 2 25+ m (0.1a 2 a 3 ) 2 2 2 25 24 = m 2 1/2 Idem, se x está mais próximo de x do que de x : x x x A quantidade 2-24 = β -n é chamada de erro de arredondamento unitário para a máquina F(2,24,-127,128). Unitário : em relação a 1. Nesta máquina, 7 dígitos decimais significativos serão preservados na maioria das operações, pois o erro relativo, ao se aproximar um nro real pelo nro de máquina mais próximo, não excede: 2-24 -7 0.5x10 Aritmética com precisão finita Erros em operações elementares Erros numéricos também são produzidos durante a execução de operações aritméticas elementares fora da faixa de abrangência da máquina. Exemplo: Adição de x=0.37218 10 4 e y=0.71422 10-1 em F(10,5,-15,15) Expoente do menor é ajustado de modo que os 2 expoentes sejam iguais (Nros são adicionados em um acumulador com o dobro da precisão) x = 0.3721800000 10 4 y = 0.0000071422 10 4 x+y = 0.3721871422 10 4

UFSC INE5202-30 Convertendo para o nro de máquina mais próximo: z = 0.37219 10 4 x + y = 0.3721871422 10 4 z = 0.37219 10 4 Com isto, pode-se determinar o erro relativo desta operação: x+ y z x+ y = 0.0000028578 104 0.3721871422 10 4 0.77 10 5 Note que este valor está próximo de 10-5 (erro relativo máximo). Por ser relativo a 1, o erro de arredondamento unitário leva ao seguinte conceito: Def.: O ε da máquina F(β,n,e min,e max ) é o menor nro positivo tal que ainda vale 1+ε > 1. Calculado por: ε = β -n Exatamente como o arredondamento unitário. O valor ε 2 fornece a distância entre o nro 1 e o próx. nro de máquina. Exercício: no Octave, fazer: >> eps, 1+eps==1, 1+eps/2==1 Exemplo: em F(2,4,-10,10), se x = β -n = 2-4, então: 1+x = (0.1000) 2 2 +1 + (0.00001) 2 2 +1 = (0.10001) 2 2 +1 = (0.1001) 2 2 +1 O arredondamento faz com que o 1 fora da mantissa seja notado Qualquer nro < 0.00001 2 2 +1 não seria grande o suficiente para ser notado pelo computador. Ou seja, ε=0.00001 2 2 +1 = 2-4 é o menor nro tal que 1+ε > 1 O zero em ponto flutuante é representado com o menor expoente possível. Mesmo com mantissa nula, um outro expoente poderia acarretar uma perda de dígitos significativos na adição deste zero a um outro número. Exemplo: seja, em F(10,4,-9,+9), a = 0.1234 10-2 Assumindo zero =0.0000 10 0 e fazendo a + zero : 0.0000 10 0 + 0.001234 10 0 0.001234 10 0 => arredondando: 0.0012 10 0 => normalizando: 0.1200 10 2 a (!?) Concluímos que deve ser: zero := 0.0000 10-9 Erros em operações elementares: Perda de significância Os dígitos da mantissa em um número normalizado não têm todos a mesma significância: Os que estão mais próximos do ponto decimal são mais significativos do que aqueles que estão mais distantes.

UFSC INE5202-31 Exemplo: x = +0.3721 10-5 dígito mais significativo: 3 (maior potência de 10) dígito menos significativo: 1 Obs.: por convenção científica, o último dígito da mantissa (=1 no exemplo) pode estar em erro por, no máximo, 5 unidades. Exemplo: Cálculo da diagonal de um quadrado de lado s=0.736. A diagonal é dada por: d = s 2 Neste caso: d = 0.736 1.41421356 = 1.0408611819 Resposta deve ser dada com 3 dígitos significativos: d = 0.104 10 1 Pois esta era a precisão máxima do dado do problema (s). A precisão infinita de 2 não pode acrescentar precisão ao problema. Cancelamento subtrativo: perda de significância causada pela subtração entre quantidades aproximadamente iguais. Exemplo: Avaliar y = x-sen(x) para x = 1/15, em F(10,10,-15,15): 1) x = 0.6666666667 10 1 2) sen(x) = 0.6661729492 10 1 3) x sen(x) = 0.0004937175 10 1 4) x sen(x) = 0.4937175000 10 4 (normalizando) Os 3 últimos 0 s foram adicionados pelo computador (não são significativos). Valor correto: 0.4937174327 10 4 Note que este tipo de problema está associado com a operação: x - y -> fl(fl(x) - fl(y)) e não com a operação: x y -> fl(x y) Solução para este problema: antecipar a sua ocorrência. Reprogramar (mudar as fórmulas). Questão: exatamente quantos dígitos significativos são perdidos na subtração x-y, quando x y? Teorema (Perda de precisão): Sejam x e y nros de ponto flutuante normalizados tais que x>y>0. Se 2 p 1 y x 2 q, para alguns inteiros positivos p e q, então: no máximo p e no mínimo q dígitos binários (bits) significativos são perdidos na subtração x-y. Prova: Sejam x = r 2 n e y = s 2 m, onde: ½ r,s < 1. Como y<x, a máquina pode ter que deslocar y para realizar a subtração (y deve ser expresso com mesmo expoente que x) De modo que: y = (s 2 m-n ) 2 n e x-y = (r - s 2 m-n ) 2 n

A mantissa de x-y satisfaz: r s2 m n = r( s2m 1 r2 ) = r ( 1 y n x ) < 2 q Portanto, para normalizar x-y, um deslocamento de no mín. q bits é necessário: No mín. q zeros espúrios aparecem no limite direito da mantissa No mín. q bits de precisão foram perdidos. Prova semelhante para o outro lado (2-p). Exemplo: Na subtração 37.593621 37.584216, quantos bits significativos serão perdidos? UFSC INE5202-32 2 12 1 y x = 0.00025 2 11 Resposta: no mínimo 11 e no máximo 12. Técnicas para lidar com o cancelamento subtrativo Exemplo 1: Considere a função: f (x) = x 2 +1 1 Problemas para x 0. Mas esta função pode ser reescrita como: f (x) = ( x 2 +1 1)( x2 +1+1 x 2 +1+1) = (Testar para x = 10-6 na calculadora.) 2 x x 2 +1+1 Exemplo 2: Seja a função f(x) = x sen(x), Problemas para x 0, onde sen(x) x. Pode-se resolver isto com a série de Taylor para sen(x): sen(x) = x x3 3! + x5 5! x7 7! + de modo que: f (x) x3 3! x5 5! + x7 7! (tomando só alguns termos) o que é uma expressão mais precisa do que x-sen(x) para x 0. Mas quando é que se deve usar a série? Pelo Teorema da precisão, impondo que no máx. 1 bit seja perdido: 2 1 1 sen(x) x Logo: x < 1.9: usar primeiros termos da série x 1.9 x 1.9: usar a expressão original: f(x) = x - sen(x) Exemplo 3: Critique o seguinte comando: y = cos 2 x sen 2 x. Perda de significância para x (2k+1)π/4 Mas: cos 2 x sen 2 x = cos(2x) Logo, este comando deve ser substituído por: y = cos(2x)