03 aritmetica computacional
-
Upload
rafael-raeder -
Category
Documents
-
view
2.030 -
download
2
Transcript of 03 aritmetica computacional
Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de
Caldas
Aritmética Computacional
The complexity is in eye of the observer...
As much as the object allows.
2Aritmética Computacional
Introdução
Humanos: sistema decimal. Computadores: sistema binário. Como representar números negativos e
números reais? Qual é o maior número representável numa
palavra de computador? O que acontece quando o resultado é maior do
que a capacidade do computador?
3Aritmética Computacional
Conteúdo
1. Números com sinal e números sem sinal2. Adição e subtração3. Operações lógicas4. Construção de uma unidade aritmética lógica5. Multiplicação6. Divisão7. Operações em ponto flutuante8. Lendas e falhas9. Considerações Finais
Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de
Caldas
Números com sinal e números sem sinal
1
5Aritmética Computacional
Números com Sinal e Números sem Sinal Base 10:
2543(10)=2103+5102+4101+3100(10)
Base 2: 1011(2)=123+022+121+120=11(10)
Representação no Z80 (8 bits)
0 0 0 0 1 0 1 1
Bit Menos Significativo (LSB)Bit Mais Significativo (MSB)
6Aritmética Computacional
Faixa de números sem sinal para 8 bits: 0 a 256-1 0000 0000(2) = 0(10)
0000 0001(2) = 1(10)
0000 0010(2) = 2(10)
... 1111 1100(2) = 252(10)
1111 1101(2) = 253(10)
1111 1110(2) = 254(10)
1111 1111(2) = 255(10)
7Aritmética Computacional
Representação de números
Números reais: infinitos. No computador: finitos. Maioria: grande quantidade de zeros à esquerda. Computador: pode lidar com números até um certo tamanho. Overflow: tratado pelo sistema operacional. No computador: é preciso representar números com sinal.
Solução: usar 1 bit (sinal magnitude). Primeira tentativa: o bit mais significativos (MSB) é usado para
sinal. Problema: duas representações para o zero Solução mais usada: complemento a 2
8Aritmética Computacional
Complemento a 2
A regra baseia-se no fato de que a soma de um número com sua representação invertida deve ser -1:
1 xx01 xx
xx 1
9Aritmética Computacional
Faixa de valores em complemento a 2 para 3 bits
0
-4
2-2
1
3-3
-1111
101 011
001
010110
100
000
10Aritmética Computacional
X = 1111 0111
1+
Complemento a 2: regra prática
Considere X = 0000 1000, o complemento a 2 de X será:
-X = 1111 1000
11Aritmética Computacional
Interface Hardware/Software
Endereços: sempre positivos Os números vão de 0 a 27FF (Z80), e não
são nunca negativos. Em C: “int” e “unsigned int”.
12Aritmética Computacional
Exercícios
1. Converta -15(10) para binário com representação em sinal/magnitude (16 bits).
2. Converta -15(10) para binário com representação em complemento a 2 (16 bits).
3. Qual é o número, em decimal, representado em complemento a 2 por 1010 0011(2)?
4. Usando complemento a 2 qual é a faixa de números que podem ser representados com 8 bits?
Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de
Caldas
Adição e Subtração2
14Aritmética Computacional
Adição e Subtração
No computador: soma semelhante à soma no sistema decimal.
Soma: soma cada bit, mais o vai-um.
15Aritmética Computacional
Adição e Subtração (8 bits)
6(10) = 0000 0110(2) 7(10) = 0000 0111(2)
0000 01110000 0110
+
0000 1101
adição
0000 01110000 0110
-
0000 0001
subtração
0000 01111111 1010
+
0000 0001
Subtração com complemento a 2
16Aritmética Computacional
Overflow
Ocorre sempre que o resultado de uma operação não pode ser representado no hardware disponível.
Operação Operando A Operando B Resultado
A+B >= 0 >=0 <0
A+B <0 <0 >=0
A-B >=0 <0 <0
A-B <0 >=0 >=0
Se um número for negativo, e o outro positivo, não ocorrerá overflow.
17Aritmética Computacional
Exemplo de overflowAdição de 2 operandos positivos (8 bits)
0100 01100110 0000
+
1010 0110
overflow
positivo
positivo
negativo
Isto significa que o resultado está correto se o bit de sinal for ignorado
18Aritmética Computacional
Exemplo de overflowAdição de 2 operandos negativos (8 bits)
1000 00001010 0000
+
1 0010 0000
overflow
negativo
negativo
positivocarry
Isto significa que o resultado é negativo e está em complemento a 2
19Aritmética Computacional
Exemplo de overflowAdição de operandos com sinais opostos (8 bits)
0100 00001010 0000
+
1110 0000
positivo
negativo
Não ocorre overflow, o resultado é negativo e está em complemento a 2
negativo
20Aritmética Computacional
Exemplo de overflowAdição de operandos com sinais opostos (8 bits)
0110 00001100 0000
+
1 0010 0000
positivo
negativo
Não ocorre overflow, o carry é ignorado e o resultado é positivo
positivocarry
21Aritmética Computacional
Interface Hardware/Software
Na ocorrência de overflow: a máquina precisa decidir como tratá-lo. Linguagem C: não toma conhecimento do overflows. A tarefa é
do programador. FORTRAN: trata o overflow
22Aritmética Computacional
Exercícios
Faça as operações aritméticas abaixo utilizando números binários de 8 bits e complemento a 2:
1. +9 + 4
2. +9 - 4
3. -9 + 4
4. -9 - 4
Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de
Caldas
Operações Lógicas3
24Aritmética Computacional
Operações Lógicas
Em muitas aplicações é necessário processar bits isolados dentro de uma palavra operações lógicas
Shifts: deslocamento à esquerda ou à direita instruções rlc, rrc, rl, rrVer apostila de laboratório:
Aula 06 – Instruções de Rotação e Funções
25Aritmética Computacional
Operações AND e OR
Operação AND: atua bit a bit, deixando 1 como resultado somente no caso de ambos os bits correspondentes dos operandos serem 1 (aplicação de máscara)
Operação OR: também atua bit a bit colocando 1 no resultado se qualquer um dos bits correspondentes do operando for 1.
Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de
Caldas
Construção de uma Unidade Aritmética Lógica
4
27Aritmética Computacional
Introdução
Representa os músculos do computador: realiza operações aritméticas como a adição e a subtração ou operações lógicas como AND e OR
A partir de agora mostrar-se-á como construir uma UAL para realizar as quatro operações acima
28Aritmética Computacional
Blocos Construtivos BásicosEntrada Saída
a c0 11 0
a c
ac NOT (Inversora)
bac .AND
a c
b
Saída
a b c0 0 00 1 01 0 01 1 1
Entradas
bac OR a c
b
Saída
a b c0 0 00 1 11 0 11 1 1
Entrada
a
b
0
1
d
c
Entrada Saída
d c0 a1 b
MultiplexadorSe d==0, c=a senão c=b
29Aritmética Computacional
Uma UAL de 1 Bit
Unidade lógica de 1 bit:
Operação = 0 ou 1 AND ou OR.
30Aritmética Computacional
Somador de 1 bit Soma A + B + “vem 1” Gera Resultado e “vai um” Tabela Verdade:
Entradas Saídas Comentários
A B Vem 1 Soma Vai 1
0 0 0 0 0 0+0+0 = 00
0 0 1 1 0 0+0+1 = 01
0 1 0 1 0 0+1+0 = 01
0 1 1 0 1 0+1+1 = 10
1 0 0 1 0 1+0+0 = 01
1 0 1 0 1 1+0+1 = 10
1 1 0 0 1 1+1+0 = 10
1 1 1 1 1 1+1+1 = 11
31Aritmética Computacional
Exercício
Gerar a unidade lógica a seguir:
Soma
CarryOut
CarryIn
a
b+
32Aritmética Computacional
UAL Simples de 1 bit
33Aritmética Computacional
Exercícios
1. Alterar a UAL anterior para que ela gere o valor 0. Dica: a maneira mais fácil é expandir o multiplexador controlado pela linha Operação.
2. Como projetar uma UAL de 32 bits utilizando uma UAL de 1 bit?
34Aritmética Computacional
UAL de 32 bits
35Aritmética Computacional
Subtração A subtração é obtida somando-se o minuendo ao
complemento a 2 do subtraendo, ou seja,
)1( baba
O circuito ao lado inverte o valor de b. Falta ainda somar 1 ao valor de b invertido.
Como fazê-lo?
+
Resultado 0
OP0OP1
CarryInBInvertido
A0
B0
CarryOut
0
1
0
1
2
36Aritmética Computacional
Subtração
Na soma o primeiro CarryIn (vem 1) é 0. O que acontece de fizermos o primeiro
CarryIn = 1?
37Aritmética Computacional
Overflow
Como fazer a detecção de overflow?Leia o tópico “Adaptação da UAL de 32 bits
para o MIPS” e faça o exercício 4.23 do livro texto.
38Aritmética Computacional
Símbolo Geral da UAL
39Aritmética Computacional
Problema
Qual é o problema de uma UAL projetada como a anterior?
40Aritmética Computacional
Carry Lookahead
Com que velocidade podemos somar dois operandos de 32 bits? Observe que as entradas a e b podem ser
perfeitamente determinadas a qualquer tempo, mas a entrada CarryIn de um determinado somador de 1 bit depende do resultado da operação realizada no somador de 1 bit vizinho.
Solução: CarryIn1=B0CarryIn0+a0CarryIn0+a0b0 ou C1=b0c0+a0.c0+a0b0 C2=b1c1+a1c1+a0b0
41Aritmética Computacional
Carry Lookahead
Problema deste método: circuito ainda complexo para cálculos de muitos bits e portanto caro.
Qual a solução?Método de propagador e gerador. Veja livro
texto.
Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de
Caldas
Multiplicação5
43Aritmética Computacional
Exemplo: como na prática
1000 x 1001
1000 0000 0000 1000____ 1001000
multiplicando
multiplicador
produto
Número de dígitos: multiplicando + multiplicador.
32 bits x 32 bits = 64 bits.
Número de dígitos: multiplicando + multiplicador.
32 bits x 32 bits = 64 bits.
44Aritmética Computacional
Algoritmo
Como na prática Simplesmente coloque um cópia do
multiplicando (1 x multiplicando) no lugar apropriado, se o digito do multiplicando for igual a 1, ou
Coloque 0 (0 x multiplicando) no lugar apropriado, se o digito do multiplicando for igual a 0;
Veremos a seguir 3 versões do algoritmo de multiplicação para 32 bits (32 x 32 bits)
45Aritmética Computacional
Algoritmo: 1ª Versãoinício
1. teste do Multiplicador0
1a. Produto = Produto + Multiplicando
2. desloque Multiplicando 1 bit à esquerda
3. desloque Multiplicador 1 bit à direita
32 repetições?
Fim
Multiplicador0=0Multiplicador0=1
não
sim
46Aritmética Computacional
Hardware: 1ª Versão
47Aritmética Computacional
Exercício
Usando números de 4 bits, com o intuito de economizar espaço, multiplique 210 por 310 ou 00102 por 00112.
Valores iniciais:Multiplicando = 0000 0010Multiplicador = 0011Produto = 0000 0000
48Aritmética Computacional
Desvantagens
UAL de 64 bits. 2 registradores de 64 bits Próxima versão:
Metade dos bits do multiplicando da primeira versão são sempre zero, de modo que somente metade deles poderia conter informações úteis. A segunda versão utiliza-se desta informação para melhorar a performance da multiplicação.
49Aritmética Computacional
Algoritmo: 2ª Versãoinício
1. teste do Multiplicador0
1a. Some o multiplicando à metadeesquerda do produto
2. desloque o registrador de Produto 1 bit à direita
3. desloque o registrador Multiplicador 1 bit à direita
32 repetições?Fim
Multiplicador0=0Multiplicador0=1
nãosim
50Aritmética Computacional
Hardware: 2ª Versão
51Aritmética Computacional
Exercício
Multiplique 00102 por 00112 usando a segunda versão do algoritmo de multiplicação.
Valores iniciais:Multiplicando = 0010Multiplicador = 0011Produto = 0000 0000
52Aritmética Computacional
Versão Final do Algoritmo de Multiplicação O registrador reservado ao produto
desperdiça tanto espaço quanto o do multiplicador: à medida que o desperdício de espaço do produto se reduzia, a mesma coisa acontecia com o multiplicador.
53Aritmética Computacional
Algoritmo: 3ª Versãoinício
1. teste do Produto0
1a. Some o multiplicando à metadeesquerda do produto
2. desloque o registrador de Produto 1 bit à direita
32 repetições?
Fim
Produto0=0Produto0=1
nãosim
54Aritmética Computacional
Hardware: 3ª Versão
Vantagens:ULA de 32 bits. Apenas 1 registrador de 64 bits.
55Aritmética Computacional
Exercício
Multiplique 00102 por 00112 usando a terceira versão do algoritmo de multiplicação.
Valores iniciais:Multiplicando = 0010Produto = 0000 0011
Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de
Caldas
Divisão6Divide et impera.
Versão latina da velha máxima política “Divida e governe”, citada por Maquiavel em 1532
57Aritmética Computacional
Divisão
A operação recíproca da multiplicação é a divisão, operação que é ainda menos freqüente que a multiplicação e mais ardilosa. Além disso, ela oferece uma rara oportunidade de se efetuar uma operação matemática inválida: a divisão por zero.
dividendo = quociente x divisor + resto
58Aritmética Computacional
Divisãoinício
Teste doResto
2a. Desloque o Quociente 1 bit à esquerdaQ0 = 1
3. Desloque o Divisor 1 bit à direita
33 repetições?
Fim
Resto < 0Resto>=0
não
sim
1. Resto = Resto - Divisor
2b. Resto = Resto + Divisor Desloque o Quociente um 1 bit à esquerda
Q0 = 0
59Aritmética Computacional
Hardware da Divisão
DivisorDeslocamento à direita (64 bits)
UAL de 64 bitsQuociente Deslocamento
À esquerda (32 bits)
Teste decontrole
Resto
Escrita
64 bits
60Aritmética Computacional
Exercício
Dividir 0000 01112 por 00102. Valores iniciais:
Quociente = 0000Divisor = 0010 0000Resto = 0000 0111
Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de
Caldas
Operações em Ponto Flutuante7
62Aritmética Computacional
Operações em Ponto Flutuante
Suporte a números inteiros com e sem sinal. Suporte a números fracionários: 3,1414, 0,00001 etc. Notação científica: 1,34 x 103. Números normalizados: 1 dígito antes do ponto decimal. Números binários também podem ser normalizados. Ponto decimal / ponto binário. Aritmética com números normalizados: aritmética de
ponto flutuante. Em C: “float”. Formato: 1,xxxxxxxx2 2yyyy.
63Aritmética Computacional
Representação em Ponto Flutuante
s expoente mantissa
32 bits
1 8 23
ES FN 2)1(
S – sinal do número F – mantissa, normalizada E – expoente Tamanho: -2,0 1038 a 2,0 1038.
64Aritmética Computacional
Overflow em Ponto Flutuante
Ocorre quando o expoente é muito grande pra ser representado pelos 8 bits.
Underflow: O módulo do expoente negativo é muito grande.
Necessário números maiores: precisão dupla. Na linguagem C: double.
s expoente mantissa
64 bits
1 11 52
Representa números entre -2,0 10-308 a 2,0 10308.
65Aritmética Computacional
Padrão IEEE 754
Torna implícito o “1” à esquerda do ponto binário.
Quando o expoente for zero, o hardware não considera o primeiro bit “1” implícito, para permitir a representação do número “0” em ponto flutuante.
ES MantissaN 2)1()1(
66Aritmética Computacional
Padrão IEEE 754
Deve permitir comparações rápidas. Seria melhor: o menor coeficiente possível valer
00000000, e o maior 11111111. Modificação:
Subtrair 127 (peso) do exponente. Representação de –1: -1+127=-1+01111111=01111110. +1=+1+127=100000002.
Formato:
Peso para precisão dupla: 1.023.
)(2)1()1( PesoES MantissaN
67Aritmética Computacional
Exemplo 1
1. Representar o número -0,7510 em ponto flutuante e precisão simples.
2. Representar o número -0,7510 em ponto flutuante e dupla precisão.
68Aritmética Computacional
Resposta da 1
1a fase: converter para binário: 0,75 x 2 = 1,5 1 0,5 x 2 = 1,0 1 -0,7510 = -0,112 = -0,11 x 20 = -1,1 x 2-1
Em precisão simples:
Resultado:
Representação:
)(2)1()1( PesoES MantissaN
69Aritmética Computacional
Exemplo
Converter a palavra abaixo em ponto flutuante para número
70Aritmética Computacional
Resposta
Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de
Caldas
Lendas e Falhas8
72Aritmética Computacional
Lendas e Falhas
Lenda: a adição em ponto flutuante é associativa; ou seja, x+(y+z)=(x+y)+z.
Lenda: assim como uma instrução de deslocamento à esquerda pode substituir uma multiplicação inteira por uma divisão inteira por uma potência de 2.
Lenda: só os matemáticos teóricos se preocupam com a precisão das operações em ponto flutuante.
73Aritmética Computacional
Bibliografia
Patterson, David A. e Hennessy, John L. Organização e Projeto de Computadores: A Interface Hardware/Software. Ed. LTC, 732. Ed., 2000, Rio de Janeiro.
74Aritmética Computacional
+
Resultado 0
OP0OP1
CarryInBInvertido
A0
B0
CarryOut
0
1
0
1
2