Buscar

Arquitetura de Computadores Capitulo 10

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.

Continue navegando