Representação de números em máquinas



Documentos relacionados
Análise de Arredondamento em Ponto Flutuante

Notas de Cálculo Numérico

Introdução. A Informação e sua Representação (Parte II) Universidade Federal de Campina Grande. Unidade Acadêmica de Sistemas e Computação

Capítulo SETE Números em Ponto Fixo e Ponto Flutuante

Eduardo Camponogara. DAS-5103: Cálculo Numérico para Controle e Automação. Departamento de Automação e Sistemas Universidade Federal de Santa Catarina

Universidade Federal de São João Del Rei - UFSJ

2. Representação Numérica

CCI-22 CCI-22. 2) Erros de arredondamento. Matemática Computacional

Organização e Arquitetura de Computadores I

Aritmética de Ponto Flutuante e Noções de Erro. Ana Paula

Aula 2 - Cálculo Numérico

Notas da disciplina Cálculo Numérico

Aritmética de Ponto Flutuante

Unidade 5: Sistemas de Representação

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

Universidade Federal de São Carlos Departamento de Matemática Curso de Cálculo Numérico - Turma E Resolução da Primeira Prova - 16/04/2008

Aula 2 Sistemas de Numeração (Revisão)

Equações Diferenciais Ordinárias

Representando Instruções no Computador

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

DICAS PARA CÁLCULOS MAIS RÁPIDOS ARTIGO 06

Exercícios Teóricos Resolvidos

Cálculo Numérico / Métodos Numéricos. Representação de números em computadores Mudança de base 14:05

AV1 - MA (b) Se o comprador preferir efetuar o pagamento à vista, qual deverá ser o valor desse pagamento único? 1 1, , , 980

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

INSTITUTO TECNOLÓGICO

Potenciação no Conjunto dos Números Inteiros - Z

Aula 4 Conceitos Básicos de Estatística. Aula 4 Conceitos básicos de estatística

Fração como porcentagem. Sexto Ano do Ensino Fundamental. Autor: Prof. Francisco Bruno Holanda Revisor: Prof. Antonio Caminha M.

CURSO E COLÉGIO APOIO. Professor: Ronaldo Correa

Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação

Capítulo 5: Aplicações da Derivada

Aula 4 Estatística Conceitos básicos

por séries de potências

Sistemas de Numeração

Sistema de Numeração e Conversão entre Sistemas. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Métodos Numéricos. Turma CI-202-X. Josiney de Souza.

fx-82ms fx-83ms fx-85ms fx-270ms fx-300ms fx-350ms

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES SISTEMAS DE NUMERAÇÃO: REPRESENTAÇÃO EM PONTO FLUTUANTE. Prof. Dr. Daniel Caetano

Álgebra. SeM MiSTéRio

Material Teórico - Aplicações das Técnicas Desenvolvidas. Exercícios e Tópicos Relacionados a Combinatória. Segundo Ano do Ensino Médio

Estudaremos métodos numéricos para resolução de sistemas lineares com n equações e n incógnitas. Estes podem ser:

CAPÍTULO I. UNIVERSIDADE FEDERAL DE UBERLÂNDIA FACULDADE DE ENGENHARIA ELÉTRICA Apostila de Eletrônica Digital. Sistemas de Numeração. 1.

ANÁLISE NUMÉRICA DEC /97

A declaração de uma variável vel define o seu tipo. O tipo do dado define como ele será: Armazenado na memória. Manipulado pela ULA.

Faculdade Sagrada Família

Notas sobre a Fórmula de Taylor e o estudo de extremos

Problemas de Valor Inicial para Equações Diferenciais Ordinárias

Matemática Básica Função Logarítmica

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

Cálculo Numérico Faculdade de Engenharia, Arquiteturas e Urbanismo FEAU

Unidade II - Sistemas de Equações Lineares

Eventos independentes

Computadores XII: Aprendendo a Somar A4 Texto 3

Curvas em coordenadas polares

QUESTÕES COMENTADAS E RESOLVIDAS

36ª Olimpíada Brasileira de Matemática GABARITO Segunda Fase

3 - CONJUNTO DOS NÚMEROS RACIONAIS

Aula 1 Representação e Operações Aritméticas em Ponto Flutuante.

Truques e Dicas. = 7 30 Para multiplicar fracções basta multiplicar os numeradores e os denominadores: 2 30 = 12 5

Karine Nayara F. Valle. Métodos Numéricos de Euler e Runge-Kutta

Testedegeradoresde. Parte X. 38 Testes de Ajuste à Distribuição Teste Chi-Quadrado

MD Sequências e Indução Matemática 1

TEXTO DE REVISÃO: Uso da calculadora científica e potências de 10.

Principais códigos utilizados. Codificação. Código binário puro. Codificação binária. Codificação Binária. Código Binário puro e suas variantes

Algoritmos DCC 119. Introdução e Conceitos Básicos

Construção dos números racionais, Números fracionários e operações com frações

Planejamento Anual. Componente Curricular: Matemática Ano: 6º ano Ano Letivo: 2015 OBJETIVO GERAL

Lista de Exercícios 3 Estruturas de Controle Profa Susana M Iglesias

O comportamento conjunto de duas variáveis quantitativas pode ser observado por meio de um gráfico, denominado diagrama de dispersão.

Métodos Numéricos e Estatísticos Parte I-Métodos Numéricos Teoria de Erros

Cálculo Numérico Faculdade de Engenharia, Arquiteturas e Urbanismo FEAU

3º Ano do Ensino Médio. Aula nº10 Prof. Daniel Szente

Primeiro roteiro de exercícios no Scilab Cálculo Numérico

Agrupamento de Escolas General Humberto Delgado Sede na Escola Secundária/3 José Cardoso Pires Santo António dos Cavaleiros

Departamento de Matemática - UEL Ulysses Sodré. Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.

Universidade Federal Fluminense ICEx Volta Redonda Introdução a Matemática Superior Professora: Marina Sequeiros

Capítulo 1 - Erros e Aritmética Computacional

Universidade Federal do Paraná. Setor de Ciências Exatas. Departamento de Matemática

Aula 14: Instruções e Seus Tipos

Erros. Número Aproximado. Erros Absolutos erelativos. Erro Absoluto

Unidade 3 Função Logarítmica. Definição de logaritmos de um número Propriedades operatórias Mudança de base Logaritmos decimais Função Logarítmica

Sistemas Lineares. Módulo 3 Unidade 10. Para início de conversa... Matemática e suas Tecnologias Matemática

A Torre de Hanói e o Princípio da Indução Matemática

Conceitos básicos da linguagem C

NIVELAMENTO 2007/1 MATEMÁTICA BÁSICA. Núcleo Básico da Primeira Fase

Estatística II Antonio Roque Aula 9. Testes de Hipóteses

PLANIFICAÇÃO ANUAL MATEMÁTICA 3 DOMÍNIOS OBJETIVOS ATIVIDADES

Cálculo Numérico Faculdade de Engenharia, Arquiteturas e Urbanismo FEAU

Aula 9 ESCALA GRÁFICA. Antônio Carlos Campos

Cálculo numérico. ln 1 = 0. Representação numérica. Exemplo. Exemplos. Professor Walter Cunha. ln 1. I s

1. Os métodos Não-Paramétricos podem ser aplicados a uma ampla diversidade de situações, porque não exigem populações distribuídas normalmente.

Gráficos de funções em calculadoras e com lápis e papel (*)

CAPÍTULO 2. Grafos e Redes

Métodos Quantitativos Prof. Ms. Osmar Pastore e Prof. Ms. Francisco Merlo. Funções Exponenciais e Logarítmicas Progressões Matemáticas

O ENSINO DE CÁLCULO NUMÉRICO: UMA EXPERIÊNCIA COM ALUNOS DO CURSO DE CIÊNCIA DA COMPUTAÇÃO

Apresentação de Dados em Tabelas e Gráficos

36 a Olimpíada Brasileira de Matemática Nível Universitário Primeira Fase

AULAS 14, 15 E 16 Análise de Regressão Múltipla: Problemas Adicionais

Transcrição:

Capítulo 1 Representação de números em máquinas 1.1. Sistema de numeração Um sistema de numeração é formado por uma coleção de símbolos e regras para representar conjuntos de números de maneira consistente. Um sistema de numeração que desempenhe satisfatoriamente o seu propósito deve possuir as seguintes propriedades: 1. Capacidade de representar um conjunto de números distintos de maneira padronizada. 2. Deve refletir as estruturas algébricas e aritméticas dos números O sistema mais utilizado é o sistema de numeração posicional de base 10 ou sistema de numeração base-10 o sistema decimal. Em um sistema de numeração posicional a posição relativa dos símbolos guarda informação sobre o número que se quer representar. Mais especificamente, posições adjacentes estão relacionadas entre si por uma constante multiplicativa denominada base do sistema de numeração. Assim, cada símbolo em uma determinada posição contribui aditivamente com uma quantidade dada pela multiplicação do valor numérico do símbolo pela base elevada ao expoente dado pelo posição. Dessa forma, o numeral, formado por uma seqüência de símbolos, representa o número calculado a partir da soma da contribuição conjunta de cada símbolo e de sua posição. Definição (Sistemas de numeração base-b). Sistemas de numeração base-b. Dado um natural b > 1, a coleção de símbolos,, e os algarismos 1 {0, 1,..., b 1}, o numeral 2 representa o número real positivo d n d n 1 d 1 d 0, d 1 b (1.1) d j b j. (1.2) Aplicando o sinal à frente do numeral representamos os reais negativos. j n Observação. Quando não há possibilidade de equívoco, dispensamos o subscrito 10 na representação decimal. Dessa forma, por exemplo, o numeral 1, 23 10, ou simplesmente 1, 23, representa o número 1 10 0 +2 10 1 +3 10 2. Os algarismos 0 antes da vírgula também não são representados se não houver mais algum outro algarismo à esquerda. O mesmo ocorre para os algarismos zero à direita após a vírgula com exceção do uso nas ciências exatas quando faz-se necessário registrar a precisão de alguma medida. Assim, evitamos notações da forma 00... 02, 3 1 Quando a base é maior do que 10 utilizamos as letras maiúsculas A, B, C,... para representar os algarismos essa é a notação utilizada na base hexadecimal (base-16). 2 Por se tratar de números reais, a seqüência sempre é limitada à esquerda e portanto n Z.

Capítulo 1. Representação de números em máquinas 6 para indicar o racional 23 10 ; o mesmo para notações da forma 2, 30... 00, com exceção dos casos em que se quer indicar não o racional 23 10 mas uma medida com determinada precisão. Quando a representação de um número possuir dízimas periódicas utiliza-se como notação uma barra sobre a seqüência que se repete. Por exemplo, 1 67 3 é representado como 0, 3 e 495 é representado como 0, 135. Os algarismos à esquerda da vírgula formam a parte inteira do numeral, os demais formam a sua parte fracionária. Os sistemas de numeração base-b. O sistemas de numeração base-b são capazes de representar unicamente os números inteiros, no entanto, o mesmo não é verdade para números racionais. Por exemplo, o racional 11 10 possui as representações 1, 1 e 1, 09. 1.1.1. Mudança de base A partir das expressões (1.1) e (1.2) é possível construir o procedimento de mudança de bases. Seja, então, X um número representado na base b como d n d n 1 d 1 d 0, d 1... b. Encontrar a sua representação em uma outra base g significa encontrar a seqüência de algarismos d m dm 1 d 1 d0, d 1... g tal que X = d j g j. j m A seguinte abordagem consiste em separar X nas suas as partes inteira e fracionária. Denominamos a parte inteira de X como X i e, de acordo com (1.2), na nova base g X i = m d j g j, (1.3) j=0 de maneira semelhante, denominamos X f a parte fracionária de x: X f = j= 1 d j g j. (1.4) Inicialmente vamos tratar da parte inteira. A divisão de X i por g dá origem a dois termos: X i g = d 0 g + m j=1 d j g j 1, o primeiro termo no lado direito da expressão anterior é uma fração, o segundo é um número inteiro. Entendendo a operação anterior como uma divisão ineira, podemos diuzer então que a divisão de X i por g (realizada na base b) possui m j=1 d j g j 1 (que estará representado na base b em que a operação foi realizada) como quociente e d 0 (também na base b) como resto. Portanto essa operação de divisão inteira nos fornece o primeiro dígito da nova representação, d 0. Em seguida dividimos o segundo membro da igualdade anterior (ou seja, o quociente da divisão anterior) temos m j=1 d j g j 1 g = d m 1 g + d j g j 2. j=2

Capítulo 1. Representação de números em máquinas 7 E assim sucessivamente até encontrarmos o dígito d m quando o quociente da última divisão for nulo. Convém lembrar que ao iniciar o processo, conhecemos a representação de X i na base b, portanto as operações de divisão devem ser feitas na base b. Em resumo, iniciamos o procedimento com a representação de X i na base b, em seguida devemos encontrar a representação de g na base b. Uma vez encontrada essa representação, dividimos X i por g; o resto da divisão é o primeiro algarismo da representação de X i em base g o algarismo em si está representado na base b e o quociente deverá ser dividido novamente no passo seguinte. Ao contrário do que ocorre no procedimento para a mudança de base na parte inteira, a mudança de base para a parte fracionária envolve operações de multiplicação. A partir da expressão (1.4) é possível observar que g X f = d 1 + d j g j+1, o que nos fornece o primeiro dígito da parte fracionária note que no lado direito da expressão anterior o primeiro termo é um inteiro e o segundo é um fracionário. Repetindo a operação com a parte fracionária de g X f temos j= 2 g d j g j+1 = d 2 + d j g j+2. j= 2 j= 3 E assim por diante recuperamos os termos da parte fracionária de X na base g. Aqui vale a mesma observação do parágrafo anterior, as operações de multiplicação devem ser realizadas na base b e os dígitos obtidos estão representados na base b. Exemplo: Vamos representar o numeral 53, 205 6 no sistema base-8. Nesse caso X i = 53 6 e X f = 0, 13 6. Para encontrar os dígitos da parte inteira na base 8 devemos realizar sucessivas operações de divisão por 8, como X i está representado na base 6, devemos realizar todas as operações nessa base 3, ou seja vamos dividir por 12 6 (= 8 10 ): 53 6 12 6 = 4 6 + 1 6 12 6, o resto da divisão, 1 6 é o primeiro dígito (na base 6), na base 8 temos o mesmo dígito, ou seja, 1 8. Em seguida, vamos dividir o quociente 4 6 : 4 6 12 6 = 0 6 + 4 6 12 6, aqui o resto da divisão é 4 6 = 4 8 e o procedimento termina pois o quociente da divisão é nulo. Portanto a parte inteira é representada pelo numeral 41 8. 3 Para facilitar as operações é conveniente utilizar uma tabela de multiplicações em base 6 (tabuada em base 6): 1 6 2 6 3 6 4 6 5 6 1 6 1 6 2 6 3 6 4 6 5 6 2 6 2 6 4 6 10 6 12 6 14 6 3 6 3 6 10 6 13 6 20 6 23 6 4 6 4 6 12 6 20 6 24 6 32 6 5 6 5 6 14 6 23 6 32 6 41 6

Capítulo 1. Representação de números em máquinas 8 Encontramos a representação da parte fracionária através de operações de multiplicação por 8 na base 6, ou seja, 12 6 : 0, 205 6 12 6 = 2, 50 6 = 2 6 + 0, 50 6, a parte inteira da multiplicação 2 6 é o primeiro dígito após a vírgula, em base 8, 2 8. Em seguida multiplicamos a parte fracionária 0, 50 6 por 8, ou melhor, 12 6 : 0, 50 6 12 6 = 10, 50 6 = 10 6 + 0, 50 6, a parte inteira que resulta da multiplicação é 10 6 = 6 8 e a parte fracionária novamente assume a mesma forma, 0, 50 6. Isto nos permite concluir que a partir deste ponto sempre obteremos o mesmo dígito. Portanto 0, 205 6 representa o mesmo número que 0, 26 8. Combinando a parte inteira e fracionária temos finalmente que 53, 205 6 = 41, 26 8 1.2. Aritmética de máquina No ocidente, a utilização de um sistema posicional base-10 com algarismos indo-arábicos é corrente desde pelo menos o século XIV, no entanto, em outras culturas é comum encontrarmos sistemas ou pelo menos o seu reflexo na linguagem base-5, base-8, base-9, base-12 e mesmo a utilização matemática de sistemas posicionais base-20 (civilização maia) e base-60 utilizada pelos sumérios e babilônios com reflexos até hoje na notação para medir ângulos em graus minutos e segundos e nas unidades de tempo minuto e segundo. Os computadores digitais atuais, em quase sua totalidade, representam internamente os números em base-2 (base binária) e realizam operações aritméticas nessa base. No início da computação eletrônica chegaram a ser construídas máquinas que representavam números em base ternária (base-3) e em base decimal mas as idéias foram abandonadas devido ao fato de que os componentes de hardware são de fabricação mais complexa do que os necessários para uma máquina que trabalhe em base binária. No entanto muitas das calculadoras atuais realizam operações utilizando uma aritmética de base não binária apesar de armazenar os números dessa forma. 1.2.1. Representação de números inteiros Tipicamente um número inteiro é armazenado em um computador como uma seqüência de dígitos binários de comprimento fixo, dessa forma é possível representar os números de zero a 2 d 1 se forem utilizados d dígitos ou bits exclusivamente para representar um número positivo. Se houver necessidade de representar os inteiros negativos, um dos bits deve ser reservado para o sinal. Por exemplo, um registro de máquina formado por uma seqüência de 32 bits : s d 30 d 29... d 2 d 1 d 0 pode ser utilizado para representar o número binário (( 1) s d 30 d 29... d 2 d 1 d 0 ) 2. Ou seja, uma seqüência binária de 32 dígitos (ou bits) s d 30 d 29... d 2 d 1 d 0 pode representar todos os inteiros

Capítulo 1. Representação de números em máquinas 9 entre 2 31 + 1 e 2 31 1 ( 2147483647 e 2147483647) na forma ( 1) s ( d 0 2 0 + d 1 2 1 +... + d 30 2 30). Nesse caso o maior inteiro representável é dado numeral I max = 011... 11 2. Portanto I max = ( 1) 0 ( 1 + 2 1 + 2 2 +... + 2 30) = 2 31 1 = 2.147.483.647. Levando em conta os números negativos e que o zero possui duas representações possíveis (como 0 e 0), essa disposição de dados no registro permite representar os 2 32 1 inteiros entre ( 2 31 1 ) e 2 31 1. Essa técnica de registro com n bits permite armazenar em uma máquina todos os 2 n 1 números inteiros entre ( 2 n 1 1 ) e 2 n 1 1. Se em uma operação de soma ou subtração o resultado for um número que não pode ser armazenado nos registros ocorre um erro conhecido como overflow. Nesse caso a máquina deve ser capaz de reconhecer o evento e enviar uma mensagem de erro se não o fizesse, poderia retornar um número truncado que não corresponde ao resultado correto da operação programada. Observação. Uma forma alternativa de registrar inteiros positivos consiste em utilizar todos os bits do registro para representar os inteiros, neste caso, os n bits seriam capazes de registrar os 2 n inteiros entre 0 e 2 n 1. Se houver necessidade de um número de inteiros maior do que o suportado é sempre possível combinar dois ou mais registros para armazenar o número em questão. O único impedimento é a quantidade de espaço existente na máquina para os registros de números. 1.2.2. Representação de números com parte fracionária É possível estender a técnica utilizadana representação dos inteiros para representar com precisão finita, números que possuam parte fracionária. Nesse caso, além do sinal, uma parte do registro é utilizada para a parte inteira do número e o restante para a parte fracionária. Assim a seqüência de 32 bits: s d 15 d 14... d 13 d 14 d 15 pode ser interpretada, por exemplo, como um registro onde os 16 bits d 15,..., d 0 representam a parte inteira e os demais 15 bits, d 1,..., d 15, a parte fracionária: ( 1) s ( d 15 2 15 + d 14 2 14 +... + d 0 2 0 + d 1 2 1 +... + d 15 2 15). Através dessa representação, o maior número representável é 2 16 2 15 e o menor ( 2 16 2 15). Nesse intervalo só podemos representar exatamente os números em intervalos de 2 15. Esse tipo de representação de números é conhecido com representação de ponto-fixo. De forma geral, utilizando p bits para representar a parte inteira, q bits para a parte fracionária e 1 bit para o sinal podemos representar os números fracionários no intervalo [ 2 p + 2 q, 2 p 2 q ] em intervalos igualmente espaçados de 2 q. O menor número representável também possui esse valor. Se em alguma operação o resultado for um número menor em módulo que 2 q dizemos que ocorreu um erro de underflow, em particular a região compreendida pelo intervalo ( 2 q, 2 q ) é denominada região de underflow. Da mesma maneira, se o resultado de alguma operação for maior

Capítulo 1. Representação de números em máquinas 10 em módulo que 2 p 2 q, dizemos que ocorreu um erro de overflow e a região (, 2 p + 2 q ) (2 p 2 q, + ) é denominada região de overflow. De maneira geral, a cardinalidade do conjunto de números representados por uma implementação de ponto fixo com sinal, p dígitos para a parte inteira e q dígitos para a parte fracionária em base natural b é dada por 2 b p+q (contado o zero positivo +0 e o zero negativo 0). A representação em ponto fixo possui a desvantagem de representar números distintos com precisão diferente. Por exemplo os números 9999, 1234 e 0, 0012113 são representados em base 10 com 4 dígitos para a parte inteira e 4 dígitos para a parte fracionária da seguinte forma: 9999, 1234 e 0, 0012. Enquanto que no primeiro caso o número é representado com oito dígitos, o segundo dispõe de apenas dois dígitos para representá-lo. Essa assimetria na representação em ponto fixo, caracterizada pela maior precisão com que os números de maior valor absoluto são registrados, motiva a introdução da representação de ponto flutuante. 1.2.3. Representação de ponto flutuante Definição (ponto flutuante). A representação x de um número real é denominada ponto flutuante normalizado na base b, b N, se forem satisfeitas as propriedades 1. x = m b e, onde 2. m = ±0, d 1 d 2... d n n N, 3. 1 d 1 b 1 e 0 d i b 1 para i = 2, 3,... n, 4. e 1 e e 2, onde e, e 1, e 2 Z. m é denominada mantissa, e expoente e n o número de dígitos de precisão. Exemplo: O número 9999, 1234 em representação de ponto flutuante em base 10 com 8 dígitos de precisão é 0, 99991234 10 4. Utilizando essa mesma prescrição, o número 0, 0012113 é representado como 0, 12113131 10 2. Em uma representação de ponto flutuante normalizado, o primeiro algarismo após a vírgula é necessariamente maior ou igual a 1. Portanto o número zero está fora dos casos cobertos pela definição de ponto flutuante. Usualmente o incluímos em um conjunto denominado sistema de ponto flutuante onde possui a representação 0, 00... 0 b e. O sistema de ponto flutuante F (b, n, e 1, e 2 ) é definido como o conjunto de números que inclui o zero e os pontos flutuantes em base b com n dígitos de precisão e expoente que pode variar entre e 1 e e 2 inclusive. Propriedades do conjunto F (b, n, e 1, e 2 ) Ao contrário do que ocorre com os números representados por um esquema de ponto fixo, os elementos do conjunto F (b, n, e 1, e 2 ) não são igualmente espaçados. Para exemplificar essa propriedade vamos considerar o sistema dado pelo conjunto F (10, 2, 10, 10). De acordo com a definição, o elemento positivo mais próximo de zero é o numeral 0, 10 10 10, o numeral seguinte é 0, 11 10 10 e assim por diante até o numeral 0, 99 10 10. O espaçamento entre eles 4 é de 0, 01 10 10. Após o numeral 0, 99 10 10, vêm os numerais 0, 1 10 9, 0, 11 10 9,..., 0, 99 4 Note que a diferença entre esses primeiros numerais é menor do que o menor numeral representável pelo sistema, ou seja, se for realizada uma operação de subtração em ponto flutuante entre quaisquer dois elementos consecutivos o resultado será nulo.

Capítulo 1. Representação de números em máquinas 11 10 9. Agora o espaçamento já é 0, 01 10 9 e assim por diante até os maiores numerais 0, 10 10 10,..., 0, 99 10 10 cujo espaçamento é 0, 01 10 10. Portanto os elementos estão mais densamente acumulados em torno do zero. A cardinalidade de um sistema de ponto flutuante F (b, n, e 1, e 2 ) é dada por F (b, n, e 1, e 2 ) : F (b, n, e 1, e 2 ) = 1 + 2(b 1)b n 1 (e 2 e 1 + 1). (1.5) A cardinalidade do conjunto é calculada a partir de todas as combinações possíveis para a representação de um numeral como elemento de F (b, n, e 1, e 2 ), somadas ao elemento zero que não pode ser representado segundo a definição de ponto flutuante usual. O primeiro termo do lado direito de (1.5) deve-se ao zero. O fator 2 deve-se ao sinal. O fator (b 1) deve-se aos possíveis valores que o dígito d 1 pode assumir. O fator b n 1 deve-se à combinação dos b possíveis valores que os dígitos d 2,..., d n podem assumir. E finalmente, o fator (e 2 e 1 + 1) deve-se aos possíveis valores que o expoente pode assumir. Um outra propriedade importante dos pontos flutuantes diz respeito às propriedades algébricas que ao contrário dos reais, racionais e inteiros, em geral não são válidas. Vamos representar as operações de adição, subtração, multiplicação e divisão em ponto flutuante, respectivamente, pelos símbolos,,,. Dados três numeros com representação em ponto flutuante x, y e z, em geral x y x + y, x y x y, (x y) z x (y z), x (y z) (x y) (x z). Exemplo: Sejam x = 0, 1 10 3 e y = z = 0, 1 10 10, elementos do conjunto F (10, 3, 10, 10). Então x (y z) = 0, 1 10 3 (0, 1 10 10 0, 1 10 10 ) = 0, 1 10 3 0, 0 10 0 = 0, 1 10 3, por outro lado (x y) z = (0, 1 10 3 0, 1 10 10 ) 0, 1 10 10 = 0, 1 10 10 0, 1 10 10 = 0, 0 10 0. Representação em ponto flutuante IEEE754 O padrão IEEE754 (a sigla se refere ao Institute of Electrical and Electronics Engineers) foi desenvolvido com o objetivo de unificar as diversas implementações em máquina de registros e operações em ponto flutuante. A maioria dos processadores e compiladores atuais o suportam ou

Capítulo 1. Representação de números em máquinas 12 pelo menos suportam um subconjunto obrigatório das definições. É interessante observar que além dos numerais em ponto flutuante, um mesmo registro pode conter informação sobre +,, +0, 0, numerais subnormais (menores do que o usualmente suportado em uma notação F (2, n, e 2, e 1 )) e os NaN ( nota a number reservado para operações ilegais como raízes de números negativos). O padrão prevê quatro tipos de registros: registros de 32 bits denomindos pontos flutuantes de precisão simples, registros de 43 ou mais bits para precisão simples estendida, registros de 64 bits para precisão dupla e registros de 79 ou mais bits para precisão dupla estendida. A implementação de precisão simples é obrigatória, as demais são opcionais. A título de ilustração, vale a pena estudar os registros de precisão simples. Os 32 bits do registro de um numeral em precisão simples são divididos de acordo com o diagrama a abaixo, s e 07... e 00 m 22... m 00 o bit s é responsável pelo sinal, os bits e 07 e 06...e 00 são responsáveis pelo expoente e finalmente os bits m 22 m 21...m 00 são responsáveis pela mantissa. Com os 8 bits do expoente podemos representar inteiros entre 0 e 255, no entanto os registros relativos ao 0 (00000000) e 255 (11111111) são reservados para uso especial, sobram portanto os inteiros entre 1 e 254. Segundo o padrão, o inteiro relativo ao expoente está deslocado de 127, então os 8 bits permitem representar os valores inteiros entre 126 e 127. Os 23 bits restantes são utilizados para representar a mantissa com 24 dígitos binários (já que o primeiro dígito é sempre igual a 1 em uma base binária, não há necessidade explícita de armazená-lo no registro e com isso ganhamos um bit extra) com uma diferença: no padrão IEEE754 os pontos flutuantes normalizados começam com o primeiro dígito à esquerda posicionado antes da vírgula. Portanto o registro de 32 bits é capaz de armazenar os elementos não nulos do sistema F (2, 24, 126, 127) e mais os casos especiais: 1. zeros: bits do expoente e da mantissa todos nulos. O bit de sinal pode ser igual a 0 ou 1, ou seja, há uma representação para +0 e 0. 2. subnormais: bits do expoente todos nulos e os da mantissa guardam informação sobre o subnormal. 3. infinitos: bits do expoente todos iguais a 1 e os da mantissa iguais a 0. O bit de sinal pode ser igual a 0 ou 1, ou seja, há uma representação para + e. 4. NaN: bits do expoente todos iguais a 1 e os demais bits contém informação de diagnóstico. Exemplo: Vamos encontrar o registro equivalente ao numeral 1345, 875. O primeiro passo é representar o número na base binária: 1345, 875 = 10101000001, 111 2. Em seguida vamos reescrevê-lo como um ponto flutuante normalizado: 1, 0101000001111 2 10. Ignoramos o 1 antes da vírgula e adicionamos tantos 0 à direita quantos forem necessários para preencher os 23 bits, dessa forma encontramos os bits da mantissa: 01010000011110000000000.

Capítulo 1. Representação de números em máquinas 13 O expoente vale 10, com o deslocamento de 127, o inteiro a ser representado pelos bits do expoente é o 137 = 10001001 2. O bit de sinal é igual a 0 pois o número é positivo. O registro de 32 bits completo é dado por 01000100101010000011110000000000. 1.3. Erros Na análise numérica é de fundamental importância saber estimar a exatidão do resultado de um cálculo computacional. Esta seção contempla a origem dos erros que podem alterar os resultados de uma computação e os métodos utilizados para estimar os erros presentes nos resultados. 1.3.1. Origem dos erros De maneira geral, podemos classificar os erros que afetam o resultado de um procedimento computacional como erros nos dados de entrada, erros de arredondamento e erros de truncamento. Os erros nos dados de entrada são aqueles relacionados à alguma medida física. Os aparelhos utilizados para medição sempre possuem uma precisão finita em geral não muito grande quando comparada à precisão que é possível ser obtida na representação de números em máquinas e nem sempre é possível melhorá-la consideravelmente. Os erros de truncamento são os mais comuns em algoritmos numéricos. Ocorrem quando, de alguma maneira, é necessário aproximar um procedimento formado por uma seqüência infinita de passos através de um outro procedimento finito. Os erros de arredondamento são aqueles relacionados às limitações que existem na forma de representar números em máquinas. Qualquer que seja a natureza do erro, o método numérico utilizado em um dado problema deve ser capaz de estimar as suas conseqüências sobre o resultado: os dados de sáida. Vamos discutir nesta seção como propagar e controlar essa incerteza presente nos valores nas diversas operações próprias a um procedimento computacional. Devido ao seu caráter, os erros de truncamento serão estudados em conjunto com os algoritmos que os geram. 1.3.2. Conceitos iniciais Seja x um número que se conhece exatamente e x uma representação finita, ou aproximação, de x, por exemplo x = π e x = 3, 14159, ou ainda x = 1 e x = 0, 333. Então definimos erro 3 absoluto e erro relativo como: Definição (Erro absoluto e erro relativo). O erro absoluto na representação x é definido por x x x x. O erro relativo é definido como. x Em uma máquina, denominamos precisão o número de dígitos na mantissa. Por outro lado, como o próprio nome diz, a exatidão de uma aproximação é uma medida de quanto ela está próxima do valor exato. Uma maneira de estimar a exatidão utiliza o conceito de dígitos exatos de uma representação.

Capítulo 1. Representação de números em máquinas 14 Proposição (Dígitos exatos de x) Seja a aproximação x de um número x em base b. O número de dígitos exatos em x é um número natural k que satisfaz as desigualdades log b ( x x x ) 1 < k < log b ( x x x ) + 1 Através dessas definições podemos apreciar a diferença entre os conceitos de precisão e exatidão de uma representação x. Demonstração: Seja x um número 5 representado pelo numeral 0, d 1 d 2... b e e sua aproximação x, representada por um ponto flutuante normalizado com n dígitos de precisão dos quais apenas os k iniciais são iguais oas de x: 0, d 1 d 2... d k d k 1... d n b e, ou seja, necessariamente d k 1 d k 1. Podemos verificar que x e x podem ser também representados por x = 0, d 1 d 2... d k b e + 0, d k 1 d k 2... b e k e x = 0, d 1 d 2... d k b e + 0, d k 1 d k 2... d n b e k. O menor valor absoluto para a diferença 6 entre eles é dado pela situação em que d k 1 e d k 1 diferem de uma unidade, todos os demais dígitos até o n-ésimo são iguais e d j = 0 para j > n. Portanto x x 0, 1 b b e k = b e k 1. Por outro lado, o maior valor absoluto para é dado pela situação limite em que todos os dígitos d k 1, d k 2,... d n = 0 e todos os dígitos d k 1, d k 2,... = b 1. Portanto x x < 0, (b 1)(b 1)... b b e k = = ( ) (b 1)b 1 + (b 1)b 2 +... b e k (1 1b + 1b 1b 2 +... ) b e k = b e k. Essas estimativa nos permite estabelecer limites inferiores e superiores para o erro relativo: b e k 1 x x 0, d 1 d 2... b e < x b e k 0, d 1 d 2... b e. 5 Sem perda de generalidade, consideramos x e x positivos. 6 Aqui a operação de diferença é a usual para os números reais.

Capítulo 1. Representação de números em máquinas 15 Levando em conta que 0, d 1 d 2... b e 0, 1 b b e = b e 1 e que 0, d 1 d 2... b e < 0, (b 1)(b 1)... b b e = b e, temos finalmente que b k 1 < x x x < b k+1. Como todas as quantias na expressão acima são positivas e a função logaritmo é monótona : k 1 < log b x x x < k + 1 Exemplo: Seja x = π e x = 3, 141675 = 0, 3141675 10 1. Nesse caso a precisão da representação x é de 7 dígitos, no entanto x possui apenas 4 dígitos exatos. Se conhecêssemos x x apenas o erro relativo 0, 0000262117, de acordo com a proposição, teríamos que x o número de dígitos exatos é um natural k tal que 3.58151... < k < 5, 58151..., ou seja, poderíamos concluir que x possui entre 4 e 5 dígitos exatos. 1.3.3. Arredondamento O operação de arredondamento consiste em encontrar um representação x para um número x com uma determinada precisão. Essa operação é usualmente realizada em máquinas para representar internamente os números e o resultado de operações aritméticas com eles. Não há uma única forma de realizar o arredondamento e, de acordo com a aplicação, existem algoritmos mais convenientes. Vamos discutir os 5 mais comuns. Por comodidade e para melhor ilustrar, vamos discuti-los a partir dos mesmos exemplos, sempre utilizando a mantissa 0, d 1 d 2... d n. Seja a sequência { 0, 45 ; 0, 44 ; 0, 36 ; 0, 35 ; 0, 34 ; 0, 34 ; 0, 35 ; 0, 36 ; 0, 44 ; 0, 45 ; 0, 46}. Entre os possíveis algoritmos para o arredondamento vamos nos fixar nos seguintes: 1. Arredondamento por truncamento ou no sentido do zero: o último dígito é descartado. O algoritmo possui esse nome pois o seu efeito é aproximar os números do zero. { 0, 4 ; 0, 4 ; 0, 3 ; 0, 3 ; 0, 3 ; 0, 3 ; 0, 3 ; 0, 3 ; 0, 4 ; 0, 4 ; 0, 4}. 2. Arredondamento no sentido oposto ao do zero: o penúltimo dígito é arredondado para o algarismo seguinte se o último dígito for não nulo. O algoritmo possui esse nome pois o seu efeito é afastar os números do zero. { 0, 5 ; 0, 5 ; 0, 4 ; 0, 4 ; 0, 4 ; 0, 4 ; 0, 4 ; 0, 4 ; 0, 5; 0, 5; 0, 5}. 3. Arredondamento no sentido de + : o penúltimo dígito é arredondado para o algarismo seguinte se o numeral for positivo e o último dígito for não nulo. Se o numeral for negativo e o último dígito não nulo, o penúltimo algarismo é mantido. O algoritmo possui esse nome pois o seu efeito é deslocar os números de um valor maior ou igual a zero (ou seja no sentido de + ). { 0, 4 ; 0, 4 ; 0, 3 ; 0, 3 ; 0, 3 ; 0, 4 ; 0, 4 ; 0, 4 ; 0, 5 ; 0, 5 ; 0, 5}.

Capítulo 1. Representação de números em máquinas 16 4. Arredondamento no sentido de : o penúltimo dígito é mantido se o numeral for positivo e o último dígito for não nulo. Se o numeral for negativo e o último dígito não nulo, o penúltimo algarismo é arredondado para o algarismo seguinte. O algoritmo possui esse nome pois o seu efeito é deslocar os números de um valor menor ou igual a zero (ou seja, no sentido de ). { 0, 5 ; 0, 5 ; 0, 4 ; 0, 4 ; 0, 4 ; 0, 3 ; 0, 3 ; 0, 3 ; 0, 4 ; 0, 4 ; 0, 4}. 5. Arredondamento par (base decimal): o penúltimo digito é arredondado para o algarismo seguinte se o último dígito for maior ou igual a 6. Se o último dígito for menor ou igual a 4 o penúltimo dígito é mantido. Se o último dígito for igual a 5 e o penúltimo dígito for ímpar, o penúltimo digito é arredondado para o algarismo seguinte. Caso o penúltimo seja par, ele é mantido. O algoritmo possui esse nome pois como resultado os numerais sempre terminam com um algarismo par se o último algarismo for igual a 5. { 0, 4 ; 0, 4 ; 0, 4 ; 0, 4 ; 0, 3 ; 0, 3 ; 0, 4 ; 0, 4 ; 0, 4 ; 0, 4 ; 0, 5} 1.3.4. Propagação dos erros Vamos assumir que x é uma aproximação de um número x, sem perda de generalidade, vamos supor que x > x. Se quisermos encontrar o valor da função f calculada em x mas só dispormos de x devemos aproximar f(x) por f( x). Se a função f for diferenciável, pelo teorema do valor médio existe um ε ( x, x): f(x) f( x) = f (ε)(x x). Porém o teorema não diz nada sobre ε além de sua existência. Para estimar o erro cometido na aproximação f( x) devemos utilizar mais informações sobre a função f. Por exemplo, se soubermos que a derivada de f é limitada no intervalo ( x, x), sup y ( x,x) f (y) = M, então temos que f(x) f( x) = f (ε) x x M x x. Mesmo que não sejamos capazes de determinar o valor máximo da derivada da função f no intervalo ( x, x), ainda podemos considerar o caso em que x x = δ x é pequeno. Nesse caso,. se f ( x) 0 e f não varia muito rapidamente na vizinhança de x então como δ x é muito pequeno podemos considerar M f ( x) na expressão acima, dessa forma δf( x). = f(x) f( x) f ( x) x x = f ( x)δ x. O mesmo procedimento pode ser utilizado para o caso de funções que dependam de duas ou mais variáveis. Nesse caso seja o erro na i-ésima variável δ x i de um função f que dependa de n variáveis, então o erro propagado na função f resultado dos erros nas n variáveis é dado por δf( x 1, x 2,..., x n ): δf( x 1, x 2,..., x n ) = n f ( x 1, x 2,..., x n ) x i δ x i. i=1

Capítulo 1. Representação de números em máquinas 17 1.3.5. Instabilidade numérica Alguns problemas matemáticos e algoritmos numéricos possuem a propriedade de ampliar drasticamente os erros presentes nos dados de entrada e assim invalidar a saída ou resposta. No contexto do cálculo numérico, esse fenômeno é denominado instabilidade numérica. A instabilidade numérica pode estar relacionada às propriedades matemáticas do problema ou então à estrutura do algoritmo utilizado para resolvê-lo. De qualquer maneira, ao estudar um problema que pretendemos reescrever numericamente é imprescindível a análise de estabilidade do algoritmo ou o condicionamento do problema matemático. Dizemos que um problema é mal condicionado quando pequenas variações nos dados de entrada resultam em grandes variações na resposta. O seguinte exemplo é ilustrativo. Exemplo: Seja o polinômio P (x) = (x 1)(x 2)... (x 10) = x 10 55 x 9 +... + 10!. Ou seja, P é um polinômio em x com raízes inteiras 1, 2, 3,..., 10. Vamos considerar agora o polinômio P : P (x) = P (x) + 10 4 x 9. Ou seja, P é igual P a menos de um erro relativo de 1, 8 10 6 no coeficiente do termo x 9. As raízes do polinômio P são (com quatro casas decimais) x 1 = 1, 0000... x 6 = 5, 7283... x 2 = 2, 0000... x 3 = 3, 0002... x 4 = 3, 9940... x 5 = 5, 0803... x 7 = 7, 4078... 0, 6753... i x 8 = 7, 4078... + 0, 6753... i x 9 = 9, 6907... 0, 3513... i x 10 = 9, 6907... 0, 3513... i Um erro relativo de 1, 8 10 6 no coeficiente x 9 foi capaz de alterar drasticamente parte das raízes. Como entender esse fenômeno? Vamos avaliar quanto varia cada raiz x j (j = 1, 2,..., 10) quando alteramos o coeficiente 55 do termo x 9. Para tanto vamos considerar o novo polinômio P(α, x) = P (x) αx 9. Esse novo polinômio possui dez raízes x j (α), j = 1, 2,..., 10, cada uma delas depende de α. A derivada dx j dα contém informação sobre quanto a i-ésima raíz de P(α, x) varia com α=0 relação a α quando α = 0. Como P(0, x) P (x), essas derivadas possuem a informação que buscamos sobre as raízes de P. Para calcular dx j dα não será necessário encontrar explicitamente a dependência das α=0 raízes em α, basta lembrar que por definição P(α, x j (α)) = 0 (x j (α) é raiz do polinômio P(α, x)) e portanto de acordo com a regra da cadeia d dα (P(α, x j(α))) = P α (α, x j(α)) + P x (α, x j(α)) dx j dα = 0 e assim, P dx j dα = α (α, x j(α)) P x (α, x j(α)).

Capítulo 1. Representação de números em máquinas 18 O numerador da expressão acima é simplesmente P α (α, x j(α)) = x 9. Para calcular P x (α, x j(α)), basta notar que P(α, x) = (x 1)(x 2)... (x 10) αx 9, portanto P x (α, x) =(x 2)... (x 10)+(x 1)(x 3)... (x 10)+... + (x 1)... (x 9) 9αx 8, ou seja P x (α, x) = 9αx8 + 10 k=1 10 l=1,l k (x l). Assim, dx j dα = 9αx 8 + 10 k=1 x 9 j (α) 10 l=1,l k (x j(α) l). Quando α = 0, P(0, x) = P (x) então x j (0) = j para j = 1, 2,..., 10. Ou seja, dx j dα = α=0 10 k=1 j 9 10 l=1,l k (j l) = j9 10 l=1,l j (j l). Na expressão anterior, o somatório foi retirado pois o único termo que contribuía era o k = j (Por que?). Por economia de notação, vamos denominar a derivada da j-ésima raiz em α = 0 por ζ j : dx j dα ζ j = α=0 Para determinar o valor de ζ j bast a utilizar a expressão (1.6): ζ 1 2, 8 10 6 ζ 6 3, 5 10 3 ζ 2 1, 3 10 2 ζ 7 9, 3 10 3 ζ 3 2, 0 ζ 8 1, 3 10 4 ζ 4 6, 1 10 1 ζ 9 9, 6 10 3 ζ 5 6, 8 10 2 ζ 10 2, 8 10 3 j 9 10 (1.6) l=1,l j (j l). E assim podemos notar que enquanto a variação no valor das primeiras raízes é pequena, o mesmo não pode ser dito para as demais. O valor das derivadas explica o mal condicionamento deste problema. O próximo exemplo contempla a instabilidade numérica devido ao algoritmo. Exemplo: Seja o seguinte algoritmo para calcular a integral I n. = 1 0 dx xn e x 1, onde n = 1, 2,... Podemos integrar por partes I n : I n = x n e x 1 1 x=1 x=0 n dx x n 1 e x 1 0 = 1 n I n 1. (1.7) Como I n = 1 ni n 1, se conhecermos I 1, poderemos encontrar I 2, I 3 e assim por diante. Antes de dar prosseguimento vamos examinar um pouco mais a integral I n. No intervalo de

Capítulo 1. Representação de números em máquinas 19 integração [0, 1], o integrando é sempre positivo, além disso, o termo e x 1 é sempre menor ou igual a 1, isto implica a desigualdade 0 < I n 1 0 dx x n = 1 n + 1. (1.8) Portanto devemos esperar que os termos I n decresçam com n e sejam sempre positivos. O primeiro termo I 1 pode ser calculado explicitamente utilizando integração por partes, I 1 = 1 0 dx x e x 1 = 1 1 0 dx e x 1 = e 1. Iremos representar I 1 aproximadamente por Ĩ1 com cinco casas após a vírgula: Ĩ 1 = 0, 36788. Nesse caso δ = I 1 Ĩ1 5, 6 10 7. Se calcularmos os demais termos a partir da iteração (1.7) encontraremos Ĩ 1 = 0, 36778 Ĩ 6 = 0, 12640 Ĩ 2 = 0, 26424 Ĩ 7 = 0, 11520 Ĩ 3 = 0, 20728 Ĩ 8 = 0, 07840 Ĩ 4 = 0, 17088 Ĩ 9 = 0, 29440 (?) Ĩ 5 = 0, 14560 Ĩ 10 = 1, 944 (???) O que ocorreu aqui? A estimativa (1.8) prevê o decrescimento de I n com n e I n > 0. Vamos analisar a iteração levando em conta a aproximação inicial. Partimos portanto de Ĩ1 = I 1 + δ, então segundo a iteração (1.7) Ĩ 2 = 1 2(Ĩ1) = 1 2(I 1 + δ) = I 2 2δ e então Ĩ 3 = 1 3(Ĩ2) = 1 3(I 2 2δ) = I 3 + 3 2 δ. Por indução temos então que Ĩ n = I n + ( 1) n+1 n!δ. Ou seja, o erro cresce com o fatorial de n. Dessa forma Ĩ 9 I 9 + 9! 5, 6 10 7 I 9 + 0, 2 e I 10 I 10 10! 5, 6 10 7 I 10 2. Felizmente uma pequena alteração do algoritmo permite resolver a questão da instabilidade. Basta reescrever a iteração (1.7) como I n 1 = 1 n (1 I n) (1.9)

Capítulo 1. Representação de números em máquinas 20 isolando I n 1. Utilizando os mesmos critérios é possível verificar que o erro cometido no ponto inicial é mais e mais diluído a cada passo do algoritmo (verifique!) Além dessa propriedade, a diferença da iteração (1.9) reside no fato de que o ponto inicial deve ser um valor de n suficientemente grande para que os índices abaixo possam ser calculados pelo algoritmo. Neste ponto a estimativa (1.8) é útil, pois ela nos diz que I n decresce com n e mais I n < 1 n+1. Portanto podemos utilizar um número n suficientemente alto, Ĩn = 0 e δ = 1 n+1. 1.4. Exercícios 1) Represente em base decimal os seguintes numerais: a) 1011101, 101 2 b) 7, 7 8 c) AB, F E 16 2) Utilize no máximo dez algarismos após a vírgula para representar o número 0, 11 nas bases 2, 3 e 16. 3) Quantos bits, no mínimo, são necessários para representar os inteiros entre 3000 e 3000 em um registro de máquina. Quais os inteiros adicionais que podem ser representados utilizando o mesmo registro? 4) Quantas soluções admite a equação 1 x = 1 em uma máquina que utilize o sistema de ponto flutuante F (10, 10, 99, 99). 5) Represente todos os elementos positivos do conjunto F (2, 3, 1, 2) na reta real. 6) A função de Bessel modificada I α (x) é solução da seguinte equação diferencial: x 2 y + x y ( x 2 + α 2) y = 0. É possivel verificar que I α (x) satisfaz a seguinte relação de recorrência xi α 1 (x) xi α+1 (x) = 2αI α (x). Dado um x fixo e supondo que I 0 (x) e I 1 (x) são conhecidos determine a estabilidade do uso da relação de recorrência para aproximar I α (x) para os demais valores do parâmetro α.