Vírgula flutuante Aula 6 17 de Março de 2005 1
Estrutura desta aula Números em vírgula flutuante Formatos dos números em vírgula fixa e em vírgula flutuante A norma IEEE 754 Normalizações, expoentes, zeros e infinitos, e valores especiais Denormals Operações fundamentais em vírgula flutuante Ref: Hennessy & Patterson, H.3 Ref: Patterson & Hennessy (bibliografia suplementar), 3.6 17 de Março de 2005 Arquitectura de Computadores 2004/05 2 - Aula 6
Números em vírgula flutuante Porque não usar inteiros maiores (com mais bits)? Porque não números com 128 bits? Ou 256 bits? Necessária demasiada memória (em número de bits) e hardware (em número de portas lógicas) para implementar as operações aritméticas, mesmo as mais simples como a adição Outros problemas Não conseguimos representar fracções: ½, ¼, 1/8, 45/78 Ou números reais aproximados: 0,4567896645577 Ou números muito grandes: 1,234 x 10 400 Ou números muito próximos do 0: 1,234 x 10-66 17 de Março de 2005 Arquitectura de Computadores 2004/05 3 - Aula 6
Porque não mudar a vírgula? Podemos escrever fracções em vírgula fixa Nos exemplos acima movemos a vírgula para o meio do número Os números em vírgula fixa comportam-se como números inteiros A vírgula está sempre num lugar fixo Um inteiro é um número em vírgula fixa com fracção reduzida a 0 bits Porém algo passa a suceder na aritmética 17 de Março de 2005 Arquitectura de Computadores 2004/05 4 - Aula 6
Aritmética em vírgula fixa A aritmética em vírgula fixa é parecida (mas não igual) à aritmética inteira Primeiro coloca-se a vírgula no resultado, e em seguida arredonda-se o resultado. Deve caber em 3 + 3 bits 17 de Março de 2005 Arquitectura de Computadores 2004/05 5 - Aula 6
Vírgula flutuante: o que é? (1) VF é exactamente o que o nome sugere: A vírgula não vem fixada na representação binária do número Aritmética finita para representar um número infinito de números reais? Suponhamos que temos números com 32 bits Temos mais de 4 mil milhões 4 000 000 000 de padrões binários para codificar todos os números reais com que pretendemos trabalhar Quais os que números que vamos poder representar? E quais os que não vamos poder representar? Existem muitas opções 17 de Março de 2005 Arquitectura de Computadores 2004/05 6 - Aula 6
Vírgula flutuante: o que é? (2) 4 partes fundamentais num número em vírgula flutuante Semelhante à notação científica Sinal do número - 1,234 x 2 +47 O expoente da base. É com o expoente que conseguimos representar números muito grandes e muito pequenos Vários dígitos significativos. O número de dígitos correctos determina a precisão do número. Normalmente designada por fracção (ou mantissa) Base implícita, em geral 2. Implícita porque não guardamos o 2 em memória. 17 de Março de 2005 Arquitectura de Computadores 2004/05 7 - Aula 6
Vírgula flutuante: o que é? (3) 4 questões chave no formato de vírgula fixa Como representar o sinal do número? Como representar a fracção (mantissa)? Como representar o expoente? Quantos bits em cada uma das 4 partes? No início foi o caos Cada computador tinha o seu formato de VF, com problemas específicos Virtualmente impossível escrever código portável, ou garantir as propriedades numéricas de uma computação sensível e necessitada de um elevado número de cálculos em VF (previsão do tempo, explosão nuclear, ) 17 de Março de 2005 Arquitectura de Computadores 2004/05 8 - Aula 6
A norma IEEE 754 para a VF Desenvolvida ~ 1980 para padronizar a aritmética em VF, torná-la portável entre diversos processadores, e maximizar a qualidade numérica dos números e resultados de operações Numa SparcStation, por exemplo, um número em VF com 32 bits tem o seguinte aspecto Bit #: 31 30 29... 25 24 23 22 21 20... 01 00 Sinal S Expoente e Fracção ou mantissa f e a interpretação numérica é (-1) S x (1,f) x 2 (e-127) 17 de Março de 2005 Arquitectura de Computadores 2004/05 9 - Aula 6
Formato básico (1) O sinal S É o sinal do número: 0 = pos, 1=neg. A fracção f É um número binário com a vírgula colocada imediatamente à esquerda do seu bit mais significativo A fracção NÃO está em complemento para 2 (ou em qualquer outra notação) É apenas um número fraccionário positivo 17 de Março de 2005 Arquitectura de Computadores 2004/05 10 - Aula 6
Formato básico (2) Exemplo de fracção Bit #: 31 30 29... 25 24 23 22 21 20... 01 00 Fracção ou mantissa f f = 0,01010000000000000001000 0x2-1 +1x2-2 +0x2-3 +1x2-4 +... +1x2-20 +... +0x2-23 = 1/4 + 1/16 + 1/1048576 = 0,31250095367431640625... 17 de Março de 2005 Arquitectura de Computadores 2004/05 11 - Aula 6
Formato básico (3) Sobre a fracção É uma fracção, logo MENOR do que 1 Não tem sinal, apenas um número binário com vírgula à esquerda Conceito novo: Normalização O número em VF que f cria é (-1) S x (1,f) x 2 (e - 127) (1,f) é uma forma abreviada de (1 + f) Porquê o 1 em (1,f)? Em todos os formatos de VF, a fracção é normalizada, o que quer dizer que o número vem modificado por forma a que cada número REAL tenha UMA e APENAS UMA representação em VF Precisamos de exemplos 17 de Março de 2005 Arquitectura de Computadores 2004/05 12 - Aula 6
Normalização (1) Consideremos um formato simplificado em VF (e mais manejável): fracção com 3 bits, para já o expoente é um inteiro e O format é: S f1 f2 f3 expoente e O número é (-1) S x 0,f1 f2 f3 x 2 (expoente e) Quero representar o número real +2 Por (-1) 0 x 0,1 0 0 x 2 (e = 2) = + 1/2 x 4 = + 2? Por (-1) 0 x 0,0 1 0 x 2 (e = 3) = + 1/4 x 8 = + 2? Por (-1) 0 x 0,0 0 1 x 2 (e = 4) = + 1/8 x 16 = + 2? Múltiplas representações do +2 não são aceitáveis 17 de Março de 2005 Arquitectura de Computadores 2004/05 13 - Aula 6
Normalização (2) Porque é que esta solução não é viável? Apenas existe um número finito de padrões binários para representar todos os reais, já que são limitadas as dimensões da fracção e do expoente Se deixarmos que um único valor (por exemplo, o número 2) seja representado de muitas formas diferentes, então apenas conseguimos representar um número bastante reduzido de números reais diferentes Como resolver o problema? Precisamos de uma representação canónica Solução possível: a fracção começa sempre com um 1 Não é a solução preconizada pela IEEE (ver à frente) 17 de Março de 2005 Arquitectura de Computadores 2004/05 14 - Aula 6
Normalização (3) Para o número real +2 (-1) 0 x 0,1 0 0 x 2 (e = 2) = + 1/2 x 4 OK, normalizada (-1) 0 x 0,0 1 0 x 2 (e = 3) = + 1/4 x 8 Not OK (-1) 0 x 0,0 0 1 x 2 (e = 4) = + 1/8 x 16 Not OK Consequência Admitir que os operandos necessários à execução de uma operação em VF já estão normalizados O hardware deve assegurar-se que o resultado da operação em VF também vem normalizado Aqui temos um problema; precisamos de hardware extra, e não é fácil de implementar 17 de Março de 2005 Arquitectura de Computadores 2004/05 15 - Aula 6
Normalização na IEEE 754 (1) Porque é que a norma IEEE afirma que o número é da forma (1+f)? Se normalizarmos uma fracção binária, 0,f1 f2 f3 f4 fn, estamos a insistir que temos sempre f1=1 (Bem, quase sempre. Se f == 0, então a fracção vem na forma 0.00000 0. Para já, apenas este caso é excepção) Ou seja, se normalizarmos um número, sabemos que ele é da forma 0,1 f2 f3 f4 fn 17 de Março de 2005 Arquitectura de Computadores 2004/05 16 - Aula 6
Normalização na IEEE 754 (2) Para quê representar esse 1 se já sabemos que é um 1? Em vez de usarmos 0,1 f2 f3 f4 fn para um número normalizado, usamos 1,f2 f3 f4 fn Não interessa para onde vai a vírgula. Pode estar na extremidade esquerda da representação, ou pode estar depois do primeiro bit. Mas tem que estar sempre no mesmo sítio No formato IEEE, o 1 é implícito (não é, na realidade, guardado na palavra) Como só se guardam os bits seguintes, temos mais um bit de precisão Em vez de 0,f1 f2 f3 fn fazemos 1,f2 f3 f4 fn, que tem mais um bit 17 de Março de 2005 Arquitectura de Computadores 2004/05 17 - Aula 6
Normalização na IEEE 754 (3) Terminologia especial Fracção f: 23 bits dos 32 bits de um número VF com precisão simples na IEEE Unpacking: processo pelo qual se retira f da representação do número, e se forma (1,f) Implícito: nome para o bit a 1 que se acrescenta à esquerda da vírgula Significanda: novo nome para o conjunto (1,f) Bit #: 31 30... 23 22 21 20 19 18... 03 02 01 00 Implícito, não guardado A fracção f, com 23 bits, está unpacked para formar a SIGNIFICANDA com 24 bits 1,f1 f2 f3... f23 17 de Março de 2005 Arquitectura de Computadores 2004/05 18 - Aula 6
De volta ao formato básico OK, agora entendemos o bit S de sinal e os bits da fracção f Bit #: 31 30... 23 22 21 20 19 18... 03 02 01 00 Bit de sinal (-1) S 1,f1 f2 f3... f23 Bit #: 31 30... 23 22 21 20 19 18... 03 02 01 00 17 de Março de 2005 Arquitectura de Computadores 2004/05 19 - Aula 6
Formato básico: expoentes Como funciona o expoente? Porquê a parte (e - 127)? Bit #: 31 30... 23 22 21 20 19 18... 03 02 01 00 Sinal (-1) S Expoente e com 8 bits fica 2 (e-127) 1,f1 f2 f3... f23 Ao 127 dá-se a designação de bias (desvio) do expoente Podemos codificar expoentes negativos ou positivos com o bias O campo e é um inteiro de 8 bits (não é um número sem sinal, nem em compl. para 2, nem em compl. para 1, nem em sinal e módulo) É biased uma representação diferente, escolhida por uma razão específica 17 de Março de 2005 Arquitectura de Computadores 2004/05 20 - Aula 6
Expoentes (1) Outro exemplo simplificado: expoente com 3 bits e2 e1 e0 Se #bits = 3, então o desvio de que precisamos é 2(3-1) - 1 = 3. Assim sendo, o nosso número será (-1) S x (1,f) x 2 (e-3) Apenas existem 8 padrões binários para o expoente: e2 e1 e0 signif. expoente 0 0 0 0-3 = -3 0 0 1 1-3 = -2 0 1 0 2-3 = -1 0 1 1 3-3 = 0 1 0 0 4-3 = 1 1 0 1 5-3 = 2 1 1 0 6-3 = 3 1 1 1 7-3 = 4 Não é simétrico. Mais um positivo do que negativos Bits e2 e1 e0 ordenados da mesma forma que usaríamos para um expoente real com sinal 17 de Março de 2005 Arquitectura de Computadores 2004/05 21 - Aula 6
Expoentes (2) O ordenados da mesma forma é a razão porque usamos um expoente desviado ( biased ) Consideremos um formato simplificado, com 1 bit de sinal, 3 bits para f, 3 bits para e: [s0 e2 e1 e0 f1 f2 f3] Consideremos 2 números: [0 001 110] = +0,110 x 2 (1-3) = +(1/2+1/4) x 2-2 = +0,1875 [0 101 110] = +0,110 x 2 (5-3) = +(1/2+1/4) x 2 2 = +3 Se compararmos apenas os padrões binários [0 001 110] e [0 101 110] como se fossem inteiros sem sinal, podemos concluir sobre os valores relativos dos números Ex: 0001110 < 0101110 considerados como inteiros sem sinal. Mas também +0,1875 < +3 A comparação de dois números em VF vem simplificada 17 de Março de 2005 Arquitectura de Computadores 2004/05 22 - Aula 6
Porque não funciona com o compl. para 2 Exemplo Usando o formato simplificado, a interpretação dos expoentes se fosse em complemento para 2: +0,1875 = +(1/2 + 1/4) x 2-2 = [0 110 110] +3 = +(1/2 + 1/4) x 2 2 = [0 010 110] 0110110 > 0010110 mas +1,875 < +3 17 de Março de 2005 Arquitectura de Computadores 2004/05 23 - Aula 6
Formatos específicos da IEEE 754 O formato IEEE acrescenta algumas peculiariedades Reserva 2 padrões binários do expoente e usa-os para fins especiais e7 e6 e5 e4 e3 e2 e1 e0 (e-127) significado 0 0 0 0 0 0 0 0-127 = Emin-1 0 0 0 0 0 0 0 1-126 = Emin 0 0 0 0 0 0 1 0-125 0 0 0 0 0 0 1 1-124... 1 1 1 1 1 1 0 1 126 1 1 1 1 1 1 1 0 127 = Emax 1 1 1 1 1 1 1 1 128 = Emax+1 Padrão especial: tudo a 0 s Padrões de expoente que podem ser utilizados para representar um número real. Emin=-126, Emax=+127 Padrão especial: tudo a 1 s 17 de Março de 2005 Arquitectura de Computadores 2004/05 24 - Aula 6
Interpret. de um número na IEEE Nem todos os padrões geram números reais 3 casos para o expoente e, baseados em Emin= -126, Emax=+127 e = Emin-1 significa e = -127 Emin<=e<=Emax, ou seja, e no intervalo [-126, +127] e = Emax+1 significa e = +128 2 casos para a fracção f: f = 0 (todos os 23 bits a 0) f!= 0 O bit de sinal não tem função nenhuma em particular, apenas designa o sinal do número em VF Vamos construir uma matriz com todos os casos No início parece complexo, mas faz sentido 17 de Março de 2005 Arquitectura de Computadores 2004/05 25 - Aula 6
Matriz de interpretação (1) 3 para o expoente, 2 para a fracção = 6 possibilidades f=0000... 00 f!=0000... 00 =xxxx... xx e=00000000 E=Emin-1= =-127 e=xxxxxxxx no intervalo [-126,+127] Sinal S=0 + 0 Sinal S=1-0 Ordinary num (-1) S x (1,f) x 2 (e-127) Denormalized numbers e=11111111 E=Emax+1= =+128 Sinal S=0 + Sinal S=1 - Not a Number NAN 17 de Março de 2005 Arquitectura de Computadores 2004/05 26 - Aula 6
Matriz de interpretação (2) Se expoente diferente de 00000000 ou 11111111, então é um número ordinário em VF f!=0000... 00 f=0000... 00 =xxxx... xx e=00000000 E=Emin-1= =-127 e=xxxxxxxx no intervalo [-126,+127] Sinal S=0 + 0 Sinal S=1-0 Ordinary num (-1) S x (1,f) x 2 (e-127) Denormalized numbers e=11111111 E=Emax+1= =+128 Sinal S=0 + Sinal S=1 - Not a Number NAN 17 de Março de 2005 Arquitectura de Computadores 2004/05 27 - Aula 6
Zeros e infinitos e = 0, f = 0 significa número = 0. São permitidos +0, -0 e= 11...1, f=0 significa núm =. São permit. +, - f=0000... 00 f!=0000... 00 =xxxx... xx e=00000000 E=Emin-1= =-127 e=xxxxxxxx no intervalo [-126,+127] Sinal S=0 + 0 Sinal S=1-0 Ordinary num (-1) S x (1,f) x 2 (e-127) Denormalized numbers e=11111111 E=Emax+1= =+128 Sinal S=0 + Sinal S=1 - Not a Number NAN 17 de Março de 2005 Arquitectura de Computadores 2004/05 28 - Aula 6
Infinitos (1) Porquê os padrões especiais? Num sistema de numeração com um número de bits finito, podemos ter números com módulos demasiado grandes para os conseguirmos representar com o número de bits disponível Exemplo: com uma fracção f com 3 bits e um expoente e com 3 bits, o maior módulo (finito) é: (1,111) x 2 (6-3) = (1,875) x 2 3 = 15 Lembrar que o expoente e=111 é especial, reservado para os INFINITOS; é por isso que o expoente do número acima é e=110 17 de Março de 2005 Arquitectura de Computadores 2004/05 29 - Aula 6
Infinitos (2) O que acontece se somarmos 1 ao número com o maior módulo? Já não temos padrões binários para representar o resultado! Faltam bits! Provocamos OVERFLOW na operação de adição em VF, porque o número que queremos é demasiado grande Porém, na aritmética da norma IEEE coloca-se o resultado em + ou - e continua-se! + = (1.000) x 2 (7-3) = (1.000) x 2 4 = 16 (!) 17 de Março de 2005 Arquitectura de Computadores 2004/05 30 - Aula 6
Zeros Um padrão todo com 0s significa o número +0 Mas o que realmente significa é (-1) 0 x (1.0) x 2 (0-127)! Bom para testar o 0 f!=0000... 00 f=0000... 00 =xxxx... xx e=00000000 E=Emin-1= =-127 e=xxxxxxxx no intervalo [-126,+127] Sinal S=0 + 0 Sinal S=1-0 Ordinary num (-1) S x (1,f) x 2 (e-127) Denormalized numbers e=11111111 E=Emax+1= =+128 Sinal S=0 + Sinal S=1 - Not a Number NAN 17 de Março de 2005 Arquitectura de Computadores 2004/05 31 - Aula 6
NaN: Not a Number (1) Alguns resultados de operações não fazem sentido (não são reais) Estes resultados não são um número, são NaN Exemplo: /0, ( - ), (-1) 1/2 17 de Março de 2005 Arquitectura de Computadores 2004/05 32 - Aula 6
NaN: Not a Number (2) f=0000... 00 f!=0000... 00 =xxxx... xx e=00000000 E=Emin-1= =-127 e=xxxxxxxx no intervalo [-126,+127] Sinal S=0 + 0 Sinal S=1-0 Ordinary num (-1) S x (1,f) x 2 (e-127) Denormalized numbers e=11111111 E=Emax+1= =+128 Sinal S=0 + Sinal S=1 - Not a Number NAN 17 de Março de 2005 Arquitectura de Computadores 2004/05 33 - Aula 6
NaN: Not a Number (3) NaN A regra básica é simples: se um dos operandos numa operação fundamental (add, sub, mult, div) é um NaN, então o resultado também é um NaN Notas Note-se que o padrão com os 32 bits todos a 1 é um NaN. Fácil de lembrar Note-se que o padrão com os 32 bits todos a 0 é um ZERO. Também é fácil de lembrar Os INFINITOS são mais complicados: e= tudo 1s, f= tudo 0s, o bit de sinal importa 17 de Março de 2005 Arquitectura de Computadores 2004/05 34 - Aula 6
Denormals (1) Uma outra categoria de números (a última): os denormals ou denormalized numbers Não são normalizados como todos os outros números Permitem a representação de números mais pequenos com precisão menor 17 de Março de 2005 Arquitectura de Computadores 2004/05 35 - Aula 6
Denormals (2) f=0000... 00 f!=0000... 00 =xxxx... xx e=00000000 E=Emin-1= =-127 e=xxxxxxxx no intervalo [-126,+127] Sinal S=0 + 0 Sinal S=1-0 Ordinary num (-1) S x (1,f) x 2 (e-127) Denormalized numbers e=11111111 E=Emax+1= =+128 Sinal S=0 + Sinal S=1 - Not a Number NAN 17 de Março de 2005 Arquitectura de Computadores 2004/05 36 - Aula 6
Denormals (3) Qual é o número em VF na norma IEEE 754 com o menor módulo? Bit #: 31 30... 23 22 21 20 19 18... 03 02 01 00 O menor expoente legal é 00000001 que é igual a O menor valor legal para f é f=00000... 0. Significanda unpacked é 1,0 2 (1-127) = 2 (-126) Logo, o menor número normalizado e legal é 1,0 x 2 (-126) 17 de Março de 2005 Arquitectura de Computadores 2004/05 37 - Aula 6
Próxima aula Principais características dos processadores RISC Estrutura de um processador (MIPS) sem pipeline, de ciclo único O datapath ou circuito de dados A unidade de controlo 17 de Março de 2005 Arquitectura de Computadores 2004/05 38 - Aula 6