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

Documentos relacionados
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

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

Organização de Computadores I

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

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

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

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:

Aritmética dos Computadores

Arquitetura de Computadores

Organização e Arquitetura de Computadores I

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

ARQUITETURA DE COMPUTADORES

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

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

Sistemas Digitais INE 5406

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

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

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:

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

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

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

Baseado nos slides de Anna Tostes SISTEMA NUMÉRICO

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

Introdução à Computação

Aula 5: Conversões Entre Bases Numéricas

Aritmética em Bases Não Decimais

ARQUITETURA DE COMPUTADORES

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

Organização de Computadores I

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

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

Organização e Arquitetura de Computadores I

Unidade III. Sistemas Numéricos e o Computador

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

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

Erros, Precisão Numérica e Ponto Flutuante

Aula 4: Bases Numéricas

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

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

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

Introdução à Computação

Fundamentos de Arquiteturas de Computadores

Organização de Computadores

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

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 (CN)

Sistemas de Computação

Introdução à Computação

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

ARQUITECTURA DE COMPUTADORES

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

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

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

Lista de Exercícios Sistemas de Numeração

Notas de Aula Guilherme Sipahi Arquitetura de Computadores. Aritmética de Inteiros

ELETRÔNICA DIGITAL I

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

Ponto Flutuante IEEE 754

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

Erros em computações numéricas

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

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

Circuitos Lógicos Aula 22

Representação Digital da Informação II

Aproximações e Erros

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

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

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

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

Transcrição:

Aula 9: Estouro e Representação em Ponto Flutuante Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Estouro e Ponto Flutuante FAC 1 / 43

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

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 3 / 43

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 ie, 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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 4 / 43

Estouro Diego Passos (UFF) Estouro e Ponto Flutuante FAC 5 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 6 / 43

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? Diego Passos (UFF) Estouro e Ponto Flutuante FAC 7 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 8 / 43

Estouro: Formalização De maneira mais geral: Estouro ocorre quando número de bis é insuficiente para respresentar 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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 9 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 10 / 43

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 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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 11 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 12 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 13 / 43

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

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 15 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 16 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 17 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 18 / 43

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 4,3, por exemplo Tem que ser aproximado para 4,0 ou 4,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 225 (erro menor) Mas o maior número representável agora é 3,75 Perdemos abrangência Diego Passos (UFF) Estouro e Ponto Flutuante FAC 19 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 20 / 43

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: eg, 0,5(10) tem 5 representações: 00001 e 000 00010 e 001 Desperdiça bits reduz precisão e abrangência Diego Passos (UFF) Estouro e Ponto Flutuante FAC 21 / 43

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: m b e Onde: m é chamado de mantissa b é a base na qual o número está escrito e é chamado de expoente, ou ordem de grandeza Na notação científica normalizada, há uma restrição adicional: Obrigatoriamente, 1 m < b De outra maneira, na base b, m possui exatamente um algarismo (não nulo) à esquerda da vírgula Diego Passos (UFF) Estouro e Ponto Flutuante FAC 22 / 43

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) 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 O expoente O sinal Na base 2, a mantissa obrigatoriamente terá exatamente o bit 1 à esquerda da vírgula Expoente é manipulado de acordo Alguns detalhes: Só um bit é necessário para o sinal Como toda mantissa terá exatamente o bit 1 à esquerda da vírgula, ele não precisa ser armazenado Só o que vem à direita da vírgula Diego Passos (UFF) Estouro e Ponto Flutuante FAC 23 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 24 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 25 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 26 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 27 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 28 / 43

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 explícitos para a mantissa Na precisão duplas, k = 1023 com 11 bits para o expoente 52 bits explícitos para a mantissa Valores de excesso escolhidos para distribuir de forma homogênea os expoentes positivos e negativos Diego Passos (UFF) Estouro e Ponto Flutuante FAC 29 / 43

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) Diego Passos (UFF) Estouro e Ponto Flutuante FAC 30 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 31 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 32 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 33 / 43

IEEE 754: Casos Especiais (II) Além da representação do 0, o padrão prevê outros casos especiais Sequências de bits com interpretação diferente da habitual Em resumo (para precisão simples): Sinal Expoente Mantissa Interpretação 0 0000 0000 0000 0000 +0 0 0000 0000 0000 0001 0,M 2 126 1111 1111 0 0000 0001 xxxx xxxx 1,M 2 (e 127) 1111 1110 0 1111 1111 0000 0000 + 0 1111 1111 0000 0001 NaN 1111 1111 1 0000 0000 0000 0000-0 1 0000 0000 0000 0001 0,M 2 126 1111 1111 1 0000 0001 xxxx xxxx 1,M 2 (e 127) 1111 1110 1 1111 1111 0000 0000 1 1111 1111 0000 0001 1111 1111 NaN Diego Passos (UFF) Estouro e Ponto Flutuante FAC 34 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 35 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 36 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 37 / 43

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 tempos que normalizar o resultado Diego Passos (UFF) Estouro e Ponto Flutuante FAC 38 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 39 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 40 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 41 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 42 / 43

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 Diego Passos (UFF) Estouro e Ponto Flutuante FAC 43 / 43