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

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

Estouro e Representação em Ponto Flutuante

Ponto Fixo e Ponto Flutuante

Aula 7: Representações de Números Inteiros: Sinal e Magnitude e Representação em Excesso de k

Aula 8: Complemento a Um e Complemento a Dois

Organização de Computadores I

Arquitetura e Organização de Computadores

Representações de Números Inteiros: Sinal e Magnitude e Representação em Excesso de k

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

Complemento a Um e Complemento a Dois

Aula 3 - Representação de Dados

Arquitetura e Organização de Computadores

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

Notas de Aula Guilherme Sipahi Arquitetura de Computadores

William Stallings Arquitetura e Organização de Computadores 8 a Edição

ARQUITETURA DE COMPUTADORES

Aritmética Binária e Complemento a Base. Introdução ao Computador 2010/1 Renan Manola

2. E presse cada um dos seguintes números inteiros decimais na representação sinal e magnitude e complemento a 2, utilizando 8 bits Resposta:

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

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

Aritmética dos Computadores

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

Arquitetura de Computadores

Organização e Arquitetura de Computadores I

Sistemas de Computação

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

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:

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

Aula 4: Bases Numéricas

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

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

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

ARQUITETURA DE COMPUTADORES

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

Baseado nos slides de Anna Tostes SISTEMA NUMÉRICO

Aula 5: Conversões Entre Bases Numéricas

Sistemas Digitais INE 5406

Organização e Arquitetura de Computadores I

Sistemas Digitais Módulo 3 Codificações BCD, Gray e ASCII e Números Fracionários

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

Introdução à Computação

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

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

Organização de Computadores

Aula 6: Aritmética em Bases Não Decimais

Introdução à Computação

Aritmética em Bases Não Decimais

Organização de Computadores I

Sistemas de Computação

Aula 4: Bases Numéricas

Erros, Precisão Numérica e Ponto Flutuante

Introdução à Computação

Representação e erros numéricos

Unidade III. Sistemas Numéricos e o Computador

Circuitos Lógicos. Prof. Odilson Tadeu Valle

Fundamentos de Arquiteturas de Computadores

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

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

6.1 Números Inteiros (Z) em Binário

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

Arquitetura de Computadores Sistema de Numeração. Apresentado por Prof. Fred Sauer Mat. Elaborado por Prof. Ricardo Quintão

Representação Digital de Informação Aritmética

Representação e Aritmética em Ponto Flutuante. 35T12 Sala 3G4 Bruno Motta de Carvalho DIMAp Sala 15 Ramal 227

Aula Expositiva 2. DCC 001 Programação de Computadores. 2º Semestre de 2011 Prof. Osvaldo Carvalho UFMG DCC

Arquitetura e Organização de Computadores. Sistemas Numéricos

Universidade Federal do Espírito Santo - UFES

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

Representação e erros numéricos

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

Representação e erros numéricos

Representação e erros numéricos

Ponto Flutuante IEEE 754

Arquitectura de Computadores I

CÁLCULO NUMÉRICO (CN)

Infraestrutura de Hardware

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

ARQUITECTURA DE COMPUTADORES

ELETRÔNICA DIGITAL I

1.,Escreva o número -0, em notação científica.

Prof. Leonardo Augusto Casillo

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

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Representação Digital da Informação II

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

REPRESENTAÇÃO DE NÚMEROS EM BINÁRIO E HEXADECIMAL

SEPS REPRESENTAÇÃO DE Nºs DIGITAIS I

Métodos Numéricos - Notas de Aula

Circuitos Lógicos Aula 22

REPRESENTAÇÃO BINÁRIA. Sistemas de Numeração e Álgebra de Boole SNA0001

Lista de Exercícios Sistemas de Numeração

Aula 10: Outras Formas de Representação

Capacidade de Armazenamento. Bit. Binário para Decimal. Decimal para Binário. Operações Aritméticas no Sistema binário.

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

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

Sistemas de Computação. Seção Notas. Valores Interessantes. Notas. Ponto Flutuante. Haroldo Gambini Santos. 26 de abril de 2010.

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

Circuitos Digitais. Conteúdo. Soma de Números Binários. Soma de Números Binários. Exemplos. Exemplos. Aritmética Binária

Transcrição:

Aula 9: Estouro e Representação em Ponto Flutuante Fernanda Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Material baseado nos slides do prof. Diego Passos Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 1 / 46

Revisão e Motivação Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 2 / 46

Esquemas de Representação: Revisão Nas últimas aulas, discutimos uma série de esquemas de representação para números negativos e não-negativos. Codificações, usando apenas bits, para representar tanto números negativos, quanto não-negativos. Esquemas vistos: Sinal e Magnitude. Representação em Excesso de k. Complemento a Um. Complemento a Dois. Ainda não abordarmos a questão dos números não-inteiros. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 3 / 46

Esquemas de Representação: Revisão (II) Para cada esquema de representação, discutimos pontos como: Unicidade da representação do 0. Como realizar operações aritméticas. Quais os limites. i.e., faixa de valores representáveis com uma determinada quantidade de bits. Considere especificamente este último ponto: a faixa de valores. O que fazer se queremos representar um valor fora da faixa? Por exemplo, representar 200 em Complemento a Dois usando 8 bits. Resposta: é impossível, precisamos de mais bits. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 4 / 46

Estouro Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 5 / 46

Estouro: Introdução Considere a seguinte situação: Computador usa Representação em Complemento a Dois com 8 bits. Deseja-se realizar a soma de dois valores nesta representação: 01101110 e 01011010. Algum problema? Aparamente, é uma operação simples. Já fizemos isso antes. 1 1 1 1 1 1 01101110 + 01011010 11001000 Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 6 / 46

Estouro: Introdução (II) Repare no que ocorreu: Efetuamos a soma de dois números positivos (01101110 e 01011010). E obtivemos um resultado negativo (11001000). Como isso é possível? Será que há algum caso especial no algoritmo de soma que não previmos? A resposta é sim e não. Vamos analisar a soma novamente, mas desta vez em base 10. Primeira parcela: 01101110 em Complemento a Dois representa 110 (10). Segunda parcela: 01011010 em Complemento a Dois representa 90 (10). Resultado obtido: 11001000 em Complemento a Dois representa 56(10). Resultado esperado: 200(10). Qual foi o problema? Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 7 / 46

Estouro: Introdução (III) De fato, nosso algoritmo de soma não levou em consideração um aspecto. O resultado da soma é muito grande para ser representado com 8 bits em Complemento a Dois. Precisaríamos de pelo menos 9. Este problema ocorre em qualquer operação aritmética que resulte em um valor fora da faixa. Outros exemplos com 8 bits: 100 (10) + 50 (10), 80 (10) + 80 (10),.... De forma geral, qualquer soma que resulte em mais que 127. Neste caso, dizemos que houve um estouro. Ou overflow. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 8 / 46

Estouro: Formalização De maneira mais geral: Estouro ocorre quando número de bits é insuficiente para representar o resultado. Pode ocorrer em qualquer representação, não só complemento a Dois. Exemplo: somar 101 (10) e 37 (10) em Sinal e Magnitude com 8 bits. 101 (10) tem representação 01100101. 37 (10) tem representação 00100101. Somando as representações, obtemos 10001010, um número negativo. Pode ocorrer também com números negativos, ou subtrações. Exemplo: somar 90 (10) e 40 (10) em Complemento a Dois com 8 bits. 90 (10) tem representação 10100110. 40 (10) tem representação 11011000. Somando as representações (e ignorando bit mais significativo), obtemos 01111110, um número positivo. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 9 / 46

Estouro: Formalização (II) Note que o overflow tem relação com a magnitude do resultado. Se o número é muito positivo ou muito negativo. Isto implica que só pode haver overflow na soma de números de mesmo sinal. Ou na subtração de números de sinal diferente. Somas de números de sinais diferentes necessariamente resultam em magnitude menor que do operando de mesmo sinal. Exemplos: 50 + ( 23) = 27, mas 27 < 50. 120 + ( 125) = 5, mas 5 < 125. Logo, overflow é impossível neste caso. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 10 / 46

Estouro: Como Detectar? Uma maneira de detectar se houver overflow é converter os operandos para base 10 e realizar a operação. Se o resultado está fora da faixa de valores da representação, há overflow. Um computador binário não pode fazer isso. Detecção tem que ser baseada apenas nos bits manipulados. Em Complemento a Dois, podemos montar uma tabela. Onde ci representa o vai-um (carry out) na posição i. a n 1 b n 1 c n 1 c n Overflow? 0 0 0 0 Não 0 0 1 0 Sim 0 1 0 0 Não 0 1 1 1 Não 1 0 0 0 Não 1 0 1 1 Não 1 1 0 1 Sim 1 1 1 1 Não Conclusão: overflow existe se, e somente se, c n 1 c n. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 11 / 46

Estouro no Complemento a Dois: Exemplos Alguns exemplos com 8 bits: Overflow 0 1 1 00101000 + 01110001 10011001 Sem Overflow 1 1 1 10101000 + 01110001 00011001 Overflow 1 0 10001110 + 11110001 01111111 Sem Overflow 0 0 1 00101000 + 01001111 01110111 Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 12 / 46

Exercícios Considere as seguintes somas de valores representados em Complemento a Dois: 001011 + 100001 com seis bits. 101011 + 111001 com seis bits. 1011 + 1101 com quatro bits. 0011 + 0101 com quatro bits. 100001 + 100001 com seis bits. Sem converter os valores para a base 10, determine quais operações resultam em overflow. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 13 / 46

Representação em Ponto Flutuante Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 14 / 46

Ponto Flutuante: Introdução Esquemas de representação vistos até aqui lidam com números negativos. Mas computadores também precisam lidar com números não-inteiros. Números com vírgula. Nenhuma das representações vistas até aqui é capaz de fazer isso. Precisamos, portanto, de um esquema de representação específico para este tipo de dado. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 15 / 46

Ponto Flutuante vs. Ponto Fixo Uma primeira abordagem para representação de números não-inteiros é a chamada Representação por Ponto Fixo. Ideia bastante intuitiva: Se temos n bits para a representação, arbitramos uma vírgula subentendida em algum ponto. À direita do bit k, para algum k < n. Exemplo, com n = 8 e k = 2 10,25(10) = 1010,01 (2). Representação em Ponto Fixo: 00101001. Vírgula subentendida depois do segundo bit, da direita para a esquerda. Mesmo valor, mas agora com n = 8 e k = 3. Representação em Ponto Fixo: 01010010. Vírgula subentendida depois do terceiro bit, da direita para a esquerda. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 16 / 46

Ponto Flutuante vs. Ponto Fixo (II) Operações de soma e subtração sobre números em Ponto Fixo podem ser executadas como se a vírgula não existisse. Isto é, como se fossem números inteiros. Porque ela está sempre no mesmo lugar para todos os números. Valores negativos podem ser representados com um bit de sinal. Como em Sinal e Magnitude. Operações de soma e subtração passam a ser realizadas como nesta representação. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 17 / 46

Ponto Flutuante vs. Ponto Fixo (III) A representação em Ponto Fixo é efetivamente uma solução para os números não-inteiros. E uma solução relativamente simples. Mas existe um problema fundamental: Como escolher a posição da vírgula? Esta questão é importante por dois motivos: Se o ponto (vírgula) é fixo, ele está no mesmo lugar para todos os números. A posição do ponto impõe um compromisso entre precisão e abrangência. Dois conceitos importantes: Precisão: o quão exata é a representação de um número. Abrangência: o quão larga é a faixa de valores representáveis. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 18 / 46

Ponto Flutuante vs. Ponto Fixo (IV) Vamos exemplificar os conceitos de precisão e abrangência. Considere uma representação em Ponto Fixo com n = 4 bits. Vamos supor, inicialmente, k = 1. Apenas um bit à direita da vírgula, três à esquerda. Parte inteira pode ser qualquer valor de 0 a 7. Parte fracionária é restrita a 0 ou 0,5. Não temos precisão suficiente para representar 2,3, por exemplo. Tem que ser aproximado para 2,0 ou 2,5. Agora considere, k = 2. Dois bits à direita da vírgula, dois à esquerda. Parte inteira pode ser qualquer valor de 0 a 3. Parte fracionária é restrita a 0, 0,25, 0,5, ou 0,75. Precisão melhorou: 2,3 (por exemplo) pode ser aproximado por 2.25 (erro menor). Mas o maior número representável agora é 3,75. Perdemos abrangência. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 19 / 46

Ponto Flutuante: Balanceando Abrangência e Precisão A decisão sobre a posição da vírgula no Ponto Fixo é difícil. Na verdade, em computadores de propósito geral, não existe uma decisão perfeita. Aplicações diferentes têm requisitos diferentes. Por este motivo, uma abordagem alternativa pode ser mais interessante. Chega-se assim à representação de Ponto Flutuante. Ideia de permitir a movimentação da vírgula. Para números grandes, vírgula fica mais à direita. Para números pequenos, vírgula fica mais à esquerda. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 20 / 46

Ponto Flutuante: Notação Científica Normalizada Um problema desta vírgula móvel é como codificar esta posição em bits. Uma ideia é armazená-la em um conjunto de bits auxiliar. Por exemplo, com 8 bits no total, podemos separar: 5 bits para o número em si. 3 bits para a posição da vírgula. Exemplos de aplicação: 4,75 (10) seria representado por 10011 e 010. 8,5 (10) seria representado por 10001 e 001. 22 (10) seria representado por 10110 e 000. Problema desta codificação: um mesmo valor pode ter múltiplas representações: e.g., 0,5 (10) tem 5 representações: 00001 e 001. 00010 e 010. 00100 e 011. 01000 e 100. 10000 e 101. Desperdiça bits reduz precisão e abrangência. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 21 / 46

Ponto Flutuante: Notação Científica Normalizada (II) Uma solução melhor, embora parecida, é representar valores na Notação Científica Normalizada. Em notação científica, números são escritos como: ± x,m b E Onde: b é a base na qual o número está escrito. x é um algarismo na base b antes da vírgula. M é chamado de mantissa. E é chamado de expoente, ou ordem de grandeza. Na notação científica normalizada, há uma restrição adicional: Obrigatoriamente, 1 x < b. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 22 / 46

Ponto Flutuante: Representando Elementos da Notação Científica Repare que esta restrição adicional faz com que a representação de um número seja única (em uma dada base). A posição da vírgula é sempre no mesmo lugar. Logo, podemos usar a notação científica normalizada para evitar o desperdício de bits da primeira solução. Basicamente, usaremos três conjuntos de bits: A mantissa (M). O expoente (E). O sinal (S). Na base 2 normalizada, a algarismo à esquerda da vírgula obrigatoriamente terá exatamente o bit 1. Expoente é manipulado de acordo. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 23 / 46

Ponto Flutuante: Representando Elementos da Notação Científica (II) Sinal Mantissa b b... b b... b Expoente Só um bit é necessário para o sinal. O expoente possui n expoente bits. A mantissa possui n mantissa bits. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 24 / 46

Ponto Flutuante: Exemplo 1 Usando 1 bit de sinal, 4 bits de mantissa e 3 bits de expoente, represente 5,5 (10). Convertendo para a base 2, 5,5(10) = 101,1 (2). Colocando em notação científica normalizada: 1,011 (2) 2 2. Convertendo o expoente para a base 2: 2 (10) = 10 (2). Os conjuntos de bits finais: Sinal Mantissa 0 0 1 0 0 1 1 0 Expoente Repare que o bit 1 à esquerda da vírgula fica subentendido. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 25 / 46

Ponto Flutuante: Exemplo 2 Usando 1 bit de sinal, 4 bits de mantissa e 3 bits de expoente, represente 12,875 (10). Convertendo para a base 2, 12,875(10) = 1100,111 (2). Colocando em notação científica normalizada: 1,100111(2) 2 3. Convertendo o expoente para a base 2: 3(10) = 11 (2). Os conjuntos de bits finais: Sinal Mantissa 1 0 1 1 1 0 0 1 1 1 Expoente Perda de Precisão Repare que houve uma perda de precisão: precisávamos de mais 2 bits para a mantissa. Neste exemplo, optamos por truncar o número. Note também que este exemplo ilustra um número negativo. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 26 / 46

Ponto Flutuante: Exemplo 3 Usando 1 bit de sinal, 4 bits de mantissa e 3 bits de expoente, represente 400,5 (10). Convertendo para a base 2, 400,5 (10) = 110010000,1 (2). Colocando em notação científica normalizada: 1,100100001 (2) 2 8. Convertendo o expoente para a base 2: 8 (10) = 1000 (2). Não é possível representar expoente com apenas 3 bits! Número é muito grande para esta representação. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 27 / 46

Ponto Flutuante: Resumo da Conversão Da base 10 para base 2: separar o sinal S: se for positivo, S = 0 e se for negativo, S = 1; converter o número na base 10 para a base 2; colocar na notação científica normalizada deslocando a vírgula: 1,M 2 E ; converter o expoente E para a base 2; juntar os bits na ordem: sinal S, expoente E, mantissa M. Considerar o número de bits do expoente e da mantissa. Da base 2 para base 10: Separar os grupos de bits: sinal (S), expoente (E) e mantissa (M). Converter E para a base 2. Colocar na forma: ( 1) S 1,M 2 E. Converter a parte 1,M para a base 10. Andar com a vírgula da mantissa, se for necessário. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 28 / 46

Ponto Flutuante: Expoentes Negativos Nos exemplos mostrados, o expoente sempre foi positivo. Andamos com a vírgula para a esquerda para normalizar. A mantissa normalizada é menor que o número original. Mas no mundo real, números pequenos (menores que 1) também ocorrem. 0,5 = 5 10 1, 0,00614 = 6,14 10 3,... Logo, o expoente precisa ser codificado de forma a permitir números negativos também. Já vimos várias opções para isso. Sinal e magnitude. Representação em Excesso. Complemento a Um. Complemento a Dois. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 29 / 46

Ponto Flutuante: Número de Bits por Componente Os slides anteriores descrevem e exemplificam a ideia da Representação em Ponto Flutuante. Colocar número na base 2. Escrevê-lo na notação científica normalizada. Armazenar cada componente (sinal, expoente e mantissa) em grupos de bits. Mas há uma questão importante: Dado um número total de bits n para a representação, quantos bits alocar para cada grupo? O sinal só precisa de um bit. Mas há um compromisso entre o tamanho da mantissa e do expoente. Mantissa maior mais precisão. Expoente maior mais abrangência. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 30 / 46

Ponto Flutuante: Padrão IEEE 754 Para garantir interoperabilidade entre computadores, em 1985, o IEEE estabeleceu formatos padronizados para números em Ponto Flutuante. Precisão simples: 32 bits no total. Precisão dupla: 64 bits no total. Precisão quádrupla: 128 bits no total.... Os formatos do IEEE 754 utilizam Representação em Excesso de k para o expoente. Na precisão simples, k = 127 com 8 bits para o expoente. 23 bits expĺıcitos para a mantissa. Na precisão duplas, k = 1023 com 11 bits para o expoente. 52 bits expĺıcitos para a mantissa. Valores de excesso escolhidos para distribuir de forma homogênea os expoentes positivos e negativos. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 31 / 46

Ponto Flutuante: Padrão IEEE 754 (II) Outra decisão importante do IEEE 754 foi em relação à ordem dos componentes. Posicionados, da esquerda para a direita, como sinal, expoente e mantissa. Permitem comparação de números como inteiros. Sinal Mantissa (23 bits, mais um subentendido) Expoente (8 bits - Excesso de 127) Sinal Mantissa (52 bits, mais um subentendido) Expoente (11 bits - Excesso de 1023) Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 32 / 46

Padrão IEEE 754: Exemplo 1 Representar valor 17,125 (10) em precisão simples. Convertendo para a base 2, 17,125 (10) = 10001,001 (2). Colocando em notação científica normalizada: 1,0001001(2) 2 4. Em Excesso de 127, expoente passa a ser 4 + 127 = 131(10). Convertendo o expoente para a base 2: 131(10) = 10000011 (2). Representação final: 01000001100010010000000000000000 Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 33 / 46

Padrão IEEE 754: Exemplo 2 Considere a seguinte sequência de bits: 10101101101101000000000000000000 Se estes bits forem interpretados como um número em ponto flutuante de precisão simples no padrão IEEE 754, qual o valor correspondente em base 10? Primeiro bit é 1: número negativo. Expoente é 01011011. Na base 10, valor corresponde a 91. Subtraindo o excesso, expoente é 91 127 = 36. Mantissa é 1,01101(2) = 1,40625 (10). Valor final (base 10): 1,40625 2 36. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 34 / 46

IEEE 754: Casos Especiais A grande maioria dos números representáveis no IEEE 754 seguem as regras já descritas. Mas há algumas exceções. Um exemplo notável é o 0. Como escrevê-lo em Ponto Flutuante? Não pode ser colocado em notação científica normalizada. Qual seria a mantissa? Para resolver este problema, padrão propõe uma representação especial para o 0: Sinal 0. Expoente 0. Mantissa 0. Note que, se aplicássemos as regras habituais, encontraríamos outros valores. Precisão simples: 1,0 2 127. Precisão dupla: 1,0 2 1023. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 35 / 46

IEEE 754: Casos Especiais (II) Infinito: representa os valores + infinito e infinito. Campo sinal: 0 para + e 1 para. Campo de expoente: todos os bits em 1. Campo de mantissa: todos os bits em 0. Não é um número (NaN Not a Number): Campo sinal: 0 ou 1. Campo de expoente: todos os bits em 1. Campo de mantissa: qualquer sequência de bits diferente de 0000... 0000. Valor não-normalizados (denormalized): Representa valores na faixa de: 0,M 2 126 a 0,M 2 126. Que não são representáveis pelo caso comum. Campo sinal: 0 ou 1. Campo de expoente: todos os bits em 0. Campo de mantissa: qualquer sequência de bits diferente de 0000... 0000. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 36 / 46

IEEE 754: Casos Especiais (Resumo) Para precisão simples: Sinal Expoente Mantissa Interpretação 0 0000... 0000 0000... 0000 +0 0 0000... 0000 0000... 0001 a 0,M 2 126 1111... 1111 0 0000... 0001 a xxxx... xxxx 1,M 2 (e 127) 1111... 1110 0 1111... 1111 0000... 0000 + 0 1111... 1111 0000... 0001 a NaN 1111... 1111 1 0000... 0000 0000... 0000-0 1 0000... 0000 0000... 0001 a 0,M 2 126 1111... 1111 1 0000... 0001 a xxxx... xxxx 1,M 2 (e 127) 1111... 1110 1 1111... 1111 0000... 0000 1 1111... 1111 0000... 0001 a NaN 1111... 1111 Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 37 / 46

IEEE 754: Limites Qual é o maior número representável no IEEE 754 (precisão simples)? Sinal 0 (positivo). Expoente 1111... 1110 (+127(10) ). Mantissa 1111... 1111. Valor final: 1,1111... 1111(2) 2 127 3,4 10 38. E o menor número (mais negativo)? Basta inverter o sinal do maior. Valor final: 3,4 10 38. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 38 / 46

IEEE 754: Limites (II) Outro valor relevante é o número de menor magnitude. Diferente de 0. Há dois casos: normalizado e não normalizado. Normalizado: Expoente 0000... 0001 ( 126 (10) ). Mantissa 0000... 0000. Valor final: 1 2 126 1,18 10 38. Não normalizado: Expoente 0000... 0000 ( 126 (10) ). Mantissa 0000... 0001 Valor final 0, 000... 0001 (2) 2 126 = 2 23 2 126 = 2 149 1,40 10 45 }{{} 23 bits Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 39 / 46

IEEE 754: Arredondamento O que fazer quando o número de bits da mantissa é insuficiente? Resposta: arredondamento. Bits menos significativos não são representados. Embora possam ter ainda algum efeito sobre a mantissa. Padrão prevê vários modos de arredondamento. Em direção ao zero (truncar). Em direção a +. Em direção a. Em direção ao mais próximo, empates em direção à mantissa par. Em direção ao mais próximo, empates na direção oposta ao zero. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 40 / 46

Operações em Ponto Flutuante: Soma Operações sobre números em ponto flutuante são geralmente complicadas. Envolvem manipulações de muitos conjuntos de bits. Há muitos casos especiais também. Por exemplo, como somamos dois números em Ponto Flutuante? Lembre-se que o número está em notação científica. Se os expoentes são iguais, podemos somar as mantissas. Caso contrário, expoente menor é igualado ao maior. Mantissa é deslocada para a direita de acordo. Ao final, ainda temos que normalizar o resultado. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 41 / 46

Operações em Ponto Flutuante: Soma (Exemplo) Soma de Mantissas + 01000010101110000000000000000000 01000001100010010000000000000000 10000011 00010010000000000000000 +1 Desloca para Direita 10000100 10001001000000000000000 +1 Desloca para Direita 10000101 01000100100000000000000 Ajuste de Expoente 1, 01110000000000000000000 + 0, 01000100100000000000000 1, 10110100100000000000000 Normalizado? Sim Resultado 010000101 10110100100000000000000 Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 42 / 46

Operações em Ponto Flutuante: Soma (Detalhes) Por que ajustar o menor expoente e não o maior? Alterar um expoente resulta em perda de precisão. Bits extremos são perdidos. Aumentar o menor expoente resulta em deslocar mantissa para a direita. Bits perdidos são os menos significativos. Além disso, aumenta a chance do resultado já estar normalizado. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 43 / 46

Operações em Ponto Flutuante: Multiplicação e Divisão Na multiplicação, mantissas são multiplicadas e expoentes são somados. Como na soma, precisamos garantir que o resultado final é normalizado. Analogamente, na divisão, executamos uma divisão entre as mantissas e uma subtração entre os expoentes. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 44 / 46

Operações em Ponto Flutuante: Estouro Assim como para as representações de números inteiros, representações em Ponto Flutuante também podem sofrer estouro. Tentativa de representar valores fora da faixa suportada. Em geral, resultantes de operações matemáticas. No caso do Ponto Flutuante, o estouro corresponde a um estouro na representação do expoente. Há dois tipos: Overflow: magnitude do número é grande demais. Exemplo (precisão simples): resultado de 1,7 10 23 4,2 10 30. Underflow: magnitude do número é pequena demais. Exemplo (precisão simples): resultado de 1,7 10 23 4,2 10 30. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 45 / 46

Exercícios Calcule a representação dos seguintes números em Ponto Flutuante: 10,5(10), com 4 bits de expoente (Complemento a Dois) e 6 de mantissa. 5,125(10), com 3 bits de expoente (Excesso de 3) e 8 de mantissa. Determine o número representado pelas seguintes sequências de bits em Ponto Flutuante: 10100110000, com 4 bits de expoente (Complemento a Dois) e 6 de mantissa. 010100100000, com 3 bits de expoente (Excesso de 3) e 8 de mantissa. Determine o maior número não normalizado que pode ser escrito em precisão simples no IEEE 754. Fernanda Passos (UFF) Estouro e Ponto Flutuante FAC 46 / 46