Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 OAC – Ponto Flutuante – Parte I - 1 Juliana F Camapum Wanderley Organização e Arquitetura de Computadores Aula 10 – Ponto Flutuante Parte I 2002 Juliana F. Camapum Wanderley http://www.cic.unb.br/docentes/juliana/cursos/oac OAC – Ponto Flutuante – Parte I - 2 Juliana F Camapum Wanderley Panorama n Números em Ponto Flutuante n Motivação: Notação Científica Decimal n Notação Científica Binária n Representação Ponto Flutuante no computador n Maior Faixa, Precisão n Conversão Decimal p/ Ponto Flutuante e vice versa n Grande Idéia: Tipo não associado com dados n Instruções MIPS p/ Ponto Flutuante, Registradores 2 OAC – Ponto Flutuante – Parte I - 3 Juliana F Camapum Wanderley Revisão de Números n Computadores são feitos para lidar com números n O que nós podemos representar com N bits? n Inteiros Sem sinal: n 0 a 2N - 1 n Inteiros com Sinal (Complemento de Dois) n -2(N-1) a 2(N-1) - 1 OAC – Ponto Flutuante – Parte I - 4 Juliana F Camapum Wanderley Outros Números n E os outros números? n Números muito grandes? (segundos/século) n 3.155.760.00010 (3,1557610 x 109) n Números muito pequenos? (diâmetro atômico) n 0,0000000110 (1,010 x 10-8) cm n Racionais (padrão repetitivo) n 2/3 (0,666666666. . .) n Irracionais n 21/2 (1,414213562373. . .) n Transcendentais n e (2,718...), p (3,141...) n Todos representados em notação científica 3 OAC – Ponto Flutuante – Parte I - 5 Juliana F Camapum Wanderley Revisão de Notação Científica 6,02 x 1023 radical (base)ponto decimal mantissa expoente n Forma Normalizada: sem zeros à frente (exatamente um dígito à esquerda do ponto decimal) n Alternativas para se representar 1/1.000.000.000 n Normalizada: 1,0 x 10-9 n Não normalizada: 0,1 x 10-8 ou 10,0 x 10-10 OAC – Ponto Flutuante – Parte I - 6 Juliana F Camapum Wanderley Notação Científica para Números Binário 1,0dois x 2 -1 radical (base)"ponto binário" Mantissa expoente n A aritmética do computador que suporta isto é chamada de ponto flutuante, porque ela representa números onde o ponto binário não é fixo, como é o caso dos inteiros. n Declaramos tais variáveis como float em C. 4 OAC – Ponto Flutuante – Parte I - 7 Juliana F Camapum Wanderley Representação de Ponto Flutuante (1/2) n Formato Normal: +1.xxxxxxxxxxdois* 2 yyyy dois n Múltiplo do Tamanho da Palavra (32 bits) 031 S Expoente 30 23 22 Significando 1 bit 8 bits 23 bits n S representa Sinal Expoente representa y’s Significando representa x’s n Representa números tão pequenos quanto 2,0 x 10-38 até tão grande quanto 2,0 x 1038 OAC – Ponto Flutuante – Parte I - 8 Juliana F Camapum Wanderley Representação de Ponto Flutuante (2/2) n E se o resultado for muito grande? (> 2,0x1038 ) n Overflow! n Overflow => Expoente maior do que pode ser representado com os 8 bits do campo Expoente n E se for muito pequeno? (< 2,0x10-38 ) n Underflow! n Underflow => Expoente negativo maior do que pode ser representado com os 8 bits do campo Expoente n Como reduzir as chances de overflow ou underflow? 5 OAC – Ponto Flutuante – Parte I - 9 Juliana F Camapum Wanderley Representação de PF de Precisão Dupla n Próx. Múltiplo do Tamanho de Palavra (64 bits) n Precisão Dupla (vs. Precisão Simples) n Variável C declarada como double n Representa números quase tão pequenos quanto 2,0 x 10-308 e quase tão grandes como 2,0 x 10308 n Mas a vantagem principal é a maior precisão devido a um significando maior. 031 S Expoente 30 20 19 Significando 1 bit 11 bits 20 bits Significando (cont’d) 32 bits OAC – Ponto Flutuante – Parte I - 10 Juliana F Camapum Wanderley Padrão IEEE 754 para Ponto Flutuante (1/4) n Precisão Simples e Precisão Dupla Similares n Bit Sinal: 1 significa negativo 0 significa positivo n Significando: n Para acomodar mais bits, o primeiro 1 é implícito para números normalizados n 1 + 23 bits simples, 1 + 52 bits dupla n sempre verdade: 0 < Significando < 1 (para números normalizados) 6 OAC – Ponto Flutuante – Parte I - 11 Juliana F Camapum Wanderley Padrão IEEE 754 para Ponto Flutuante (2/4) n Kahan: números PF deveriam ser utilizados mesmo se não houvesse um HW específico; p.ex, para ordenar registros com PF utilizando comparação de inteiros. n Quebrar PF em 3 partes: comparar os sinais, então comparar os expoentes, então comparar os significandos. n Deveria ser rápido; uma única comparação se possível, especialmente para números positivos n Então deve-se ordenar: n Bit de mais alta ordem é bit de sinal ( negativo < positive) n A seguir, expoente, então maior expoente => número maior n Por último, o significando: expoentes iguais => número maior OAC – Ponto Flutuante – Parte I - 12 Juliana F Camapum Wanderley Padrão IEEE 754 para Ponto Flutuante (3/4) n Expoente Negativo? n Complemento de 2? 1,0 x 2-1 vs 1,0 x2+1 (1/2 vs. 2) 0 1111 1111 000 0000 0000 0000 0000 00001/2 0 0000 0001 000 0000 0000 0000 0000 00002 n Esta notação utilizando inteiros: n comparação de 1/2 vs. 2 faz 1/2 > 2! n Se ao invés, usar a notação que 0000 0001 é o maior negativo e 1111 1111 é o maior positivo n 1,0 x 2-1 vs. 1,0 x2+1 (1/2 vs. 2) 1/2 0 0111 1110 000 0000 0000 0000 0000 0000 0 1000 0000 000 0000 0000 0000 0000 00002 7 OAC – Ponto Flutuante – Parte I - 13 Juliana F Camapum Wanderley Padrão IEEE 754 para Ponto Flutuante (4/4) n Chamada Notação Desviada, onde o desvio é um número subtraído para se ter o número real n IEEE 754 usa desvio de 127 para precisão simples. n Subtrair 127 do campo Expoente para se ter o valor real do expoente. n 1023 é o desvio para precisão dupla n Sumário (precisão simples): 031 S Expoente 30 23 22 Significando 1 bit 8 bits 23 bits n (-1)S x (1 + Significando) x 2(Expoente -127) n Precisão dupla idêntico, exceto que o desvio do expoente é 1023. OAC – Ponto Flutuante – Parte I - 14 Juliana F Camapum Wanderley Entendendo o Significando (1/2) n Método 1 (Frações): n Em decimal: 0,34010 => 34010/100010 => 3410/10010 n Em binário: 0,1102 => 1102/10002 = 610/810 => 112/1002 = 310/410 n Vantagem: n menos puramente numérica, mais orientada ao pensamento; n este método usualmente ajuda as pessoas a entenderem melhor o significado do significando 8 OAC – Ponto Flutuante – Parte I - 15 Juliana F Camapum Wanderley Entendendo o Significando (2/2) n Método 2 (Valor da posição): n Converter da notação científica n Em decimal: 1,6732 = (1x100) + (6x10-1) + (7x10-2) + (3x10-3) + (2x10-4) n Em binário: 1,1001 = (1x20) + (1x2-1) + (0x2-2) + (0x2-3) + (1x2-4) n A interpretação do valor em cada posição estende-se além do ponto decimal/binário. n Vantagem: bom para rapidamente se calcular o valor do significando; use este método para traduzir número PF. OAC – Ponto Flutuante – Parte I - 16 Juliana F Camapum Wanderley Exemplo: Convertendo PF Binário para Decimal n Sinal: 0 => positivo n Expoente: n 0110 1000dois = 104dez n Ajuste do desvio: 104 - 127 = -23 n Significando: n 1 + 1x2-1+ 0x2-2 + 1x2-3 + 0x2- 4 + 1x2-5 +... =1+2-1+2-3 +2-5 +2- 7 +2-9 +2-14 +2- 15 +2-17 +2-22 = 1,0 + 0,666115 0 0110 1000 101 0101 0100 0011 0100 0010 n Representa: 1,666115dez * 2-23 ~ 1,986 * 10-7 n (cerca de 2/10.000.000) 9 OAC – Ponto Flutuante – Parte I - 17 Juliana F Camapum Wanderley Continuando o Exemplo: Binário para ??? n Converter Binário Complemento de 2 para Inteiro: 0011 0100 0101 0101 0100 0011 0100 0010 0011 0100 0101 0101 0100 0011 0100 0010 13 2 1721821 0011 0100 0101 0101 0100 0011 0100 0010 4 U C B ori $s5, $v0, 17218 n Converter Binário para Instrução: n Converter Binário para ASCII: 229+228+226+222+220+218+216+214+29+28+26+21 = 878.003.010dez OAC – Ponto Flutuante – Parte I - 18 Juliana F Camapum Wanderley Grande Idéia: Tipo não associado ao Dado n O que este padrão de bit significa: n 1,986 * 10-7? 878.003.010? “4UCB”? ori $s5, $v0, 17218? n Dados podem ser qualquer coisa; a operação da instrução que acessa o operando determina o seu tipo! n Conseqüência do conceito de programa armazenado: instruções armazenadas como números 0011 0100 0101 0101 0100 0011 0100 0010 10 OAC – Ponto Flutuante – Parte I - 19 Juliana F Camapum Wanderley Convertendo Decimal para PF (1/3) n Caso simples: Se o denominador é uma potência de 2 (2, 4, 8, 16, etc.), então é fácil. n Mostrar representação MIPS de –0,75 n -0,75 = -3/4 n -11dois/100dois = -0,11dois n Normalizado para –1,1dois x 2-1 n (-1)S x (1 + Significando) x 2(Expoente -127) n (-1)1 x (1 + ,100 0000 ... 0000) x 2(126-127) 1 0111 1110 100 0000 0000 0000 0000 0000 OAC – Ponto Flutuante – Parte I - 20 Juliana F Camapum Wanderley Convertendo Decimal para PF (2/3) n Caso não tão simples: Se o denominador não é uma potência de 2. n Então nós não podemos representar o número precisamente; mas é por isso que nós temos tantos bits no significando: para precisão. n Uma vez que temos o significando, normalizar um número para se ter o expoente é fácil. n Então, como achamos o significando de um número sem fim? 11 OAC – Ponto Flutuante – Parte I - 21 Juliana F Camapum Wanderley Convertendo Decimal para PF (3/3) n Fato: Todos os números racionais tem um padrão repetitivo quando escritos na forma decimal. n Fato: Isto se aplica também a binários. n Para finalizar a conversão: n Escrever o número binário com o padrão repetitivo. n Cortá-lo após número correto de bits (diferente para precisão simples e dupla). n Deduzir os campos Sinal, Expoente e Significando. OAC – Ponto Flutuante – Parte I - 22 Juliana F Camapum Wanderley Exemplo (1/2) n Como representar 1/3 em MIPS? n 1/3 = 0,33333...10 = 0,25 + 0,0625 + 0,015625 + 0,00390625 + 0,0009765625 + ... = 1/4 + 1/16 + 1/64 + 1/256 + 1/1024 + ... = 2-2 + 2-4 + 2-6 + 2-8 + 2-10 + ... = 0,0101010101... 2 * 20 = 1,0101010101... 2 * 2-2 12 OAC – Ponto Flutuante – Parte I - 23 Juliana F Camapum Wanderley Exemplo (2/2) n Sinal: 0 n Expoente = -2 + 127 = 12510= 011111012 n Significando = 0101010101... 0 0111 1101 0101 0101 0101 0101 0101 010 OAC – Ponto Flutuante – Parte I - 24 Juliana F Camapum Wanderley Representação para +/- Infinito n Em PF, divisão por zero deveria produzir +/- infinito, não overflow. n Por quê? n OK para se fazer cálculos avançados com infinito; p.ex., X/0 > Y pode ser uma comparação válida n Pergunte aos experts de matemática n IEEE 754 representa +/- infinito n Maior expoente positivo reservado para infinito. n Significando todo zero. 13 OAC – Ponto Flutuante – Parte I - 25 Juliana F Camapum Wanderley Representação 0 n Representar 0? n expoente todo zero n significando todo zero n E o sinal? n +0: 0 00000000 00000000000000000000000 n -0: 1 00000000 00000000000000000000000 n Por que dois zeros? n Ajuda em algumas comparações de limite. n Pergunte aos experts em matemática. OAC – Ponto Flutuante – Parte I - 26 Juliana F Camapum Wanderley Números Especiais n O que nós definimos até agora? (Single Precision) Expoente Significando Objeto 0 0 0 0 não zero ??? 1-254 qq coisa +/- num. PF 255 0 +/- infinito 255 não zero ??? 14 OAC – Ponto Flutuante – Parte I - 27 Juliana F Camapum Wanderley Adição em PF n Muito mais difícil do que com inteiros. n Não pode simplesmente somar os significandos n Como se faz? n De-normalizar para igualar expoentes n Soma significandos para ter um resultante. n Manter o mesmo expoente n Normaliza (possivelmente mudando expoentes) n Nota: Se os sinais diferem, realiza-se uma subtração ao invés da adição. OAC – Ponto Flutuante – Parte I - 28 Juliana F Camapum Wanderley Subtração PF n Similar à adição n Como nós fazemos? n De-normalizar para igualar expoentes n Subtrair significandos n Manter o mesmo expoente n Normalizar (possivelmente mudando expoente) 15 OAC – Ponto Flutuante – Parte I - 29 Juliana F Camapum Wanderley Adição/Subtração PF n Problemas na implementação de add/sub PF: n Se os sinais diferem para add (ou mesmo para sub), qual será o sinal do resultado? n Questão: Como nós integramos isto na unidade de aritmética inteira? n Resposta: Nós não integramos! OAC – Ponto Flutuante – Parte I - 30 Juliana F Camapum Wanderley Arquitetura MIPS para Ponto Flutuante (1/4) n Instruções separadas para ponto flutuante: n Precisão Simples: add.s, sub.s, mul.s, div.s n Precisão Dupla: add.d, sub.d, mul.d, div.d n Estas instruções são muito mas complicadas do que suas contrapartidas inteiras, de modo que devem demorar muito mais. 16 OAC – Ponto Flutuante – Parte I - 31 Juliana F Camapum Wanderley n Problemas: n É ineficiente ter instruções diferentes que levam quantidades de tempo tão vastamente diferente. n Geralmente, uma parte específica de dados não mudará de PF para int, ou vice versa, dentro de um programa. Assim, somente um tipo de instrução será utilizado nela. n Alguns programas não fazem nenhum cálculo em ponto flutuante. n Precisa-se de muito hardware relativamente a inteiros para se fazer Ponto Flutuante rápido. Arquitetura MIPS para Ponto Flutuante (2/4) OAC – Ponto Flutuante – Parte I - 32 Juliana F Camapum Wanderley Arquitetura MIPS para Ponto Flutuante (3/4) n Solução de 1990: Fazer um chip completamente separado que trata somente de PF. n Coprocessador 1: chip PF n contém 32 registradores de 32-bit: $f0, $f1, ... n maior parte dos registradores especificados nas instruções .s e.d se referem a este conjunto. n Load e Store separados: lwc1 e swc1 (“load word coprocessor 1”, “store ...”) n Precisão Dupla: por convenção, pares par/ímpar contém PF PD: $f0/$f1, $f2/$f3, ... , $f30/$f31 17 OAC – Ponto Flutuante – Parte I - 33 Juliana F Camapum Wanderley Arquitetura MIPS para Ponto Flutuante (4/4) n Computador de 1990 realmente contém múltiplos chips separados: n Processador: todas as coisas normais; n Coprocessador 1: PF e somente PF; n mais coprocessadores?… Sim, mais tarde n Hoje, chips baratos pode deixar de fora HW de PF n Instruções para mover dados entre o processador principal e os coprocessadores: n mfc0, mtc0, mfc1, mtc1, etc. OAC – Ponto Flutuante – Parte I - 34 Juliana F Camapum Wanderley Coisas para se Lembrar n Números PF aproximam valores que queremos utilizar. n Padrão IEEE 754 para PF é uma tentativa quase que universalmente aceita para se padronizar a interpretação de tais números n Novos registradores MIPS ($f0-$f31), instruções: n Precisão Simples (32 bits, 2x10-38...2x1038): add.s, sub.s, mul.s, div.s n Precisão Dupla (64 bits , 2x10-308...2x10308): add.d, sub.d, mul.d, div.d n Tipo não é associado com dados, bits não tem significado exceto em dado contexto.
Compartilhar