74
Prof. Cláudio Faria e Lideir Viana PUC-Minas campus de Poços de Caldas Aritmética Computacional The complexity is in eye of the observer... As much as the object allows.

03 aritmetica computacional

Embed Size (px)

Citation preview

Page 1: 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.

Page 2: 03 aritmetica  computacional

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?

Page 3: 03 aritmetica  computacional

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

Page 4: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Números com sinal e números sem sinal

1

Page 5: 03 aritmetica  computacional

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)

Page 6: 03 aritmetica  computacional

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)

Page 7: 03 aritmetica  computacional

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

Page 8: 03 aritmetica  computacional

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

Page 9: 03 aritmetica  computacional

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

Page 10: 03 aritmetica  computacional

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

Page 11: 03 aritmetica  computacional

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”.

Page 12: 03 aritmetica  computacional

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?

Page 13: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Adição e Subtração2

Page 14: 03 aritmetica  computacional

14Aritmética Computacional

Adição e Subtração

No computador: soma semelhante à soma no sistema decimal.

Soma: soma cada bit, mais o vai-um.

Page 15: 03 aritmetica  computacional

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

Page 16: 03 aritmetica  computacional

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.

Page 17: 03 aritmetica  computacional

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

Page 18: 03 aritmetica  computacional

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

Page 19: 03 aritmetica  computacional

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

Page 20: 03 aritmetica  computacional

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

Page 21: 03 aritmetica  computacional

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

Page 22: 03 aritmetica  computacional

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

Page 23: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Operações Lógicas3

Page 24: 03 aritmetica  computacional

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

Page 25: 03 aritmetica  computacional

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.

Page 26: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Construção de uma Unidade Aritmética Lógica

4

Page 27: 03 aritmetica  computacional

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

Page 28: 03 aritmetica  computacional

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

Page 29: 03 aritmetica  computacional

29Aritmética Computacional

Uma UAL de 1 Bit

Unidade lógica de 1 bit:

Operação = 0 ou 1 AND ou OR.

Page 30: 03 aritmetica  computacional

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

Page 31: 03 aritmetica  computacional

31Aritmética Computacional

Exercício

Gerar a unidade lógica a seguir:

Soma

CarryOut

CarryIn

a

b+

Page 32: 03 aritmetica  computacional

32Aritmética Computacional

UAL Simples de 1 bit

Page 33: 03 aritmetica  computacional

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?

Page 34: 03 aritmetica  computacional

34Aritmética Computacional

UAL de 32 bits

Page 35: 03 aritmetica  computacional

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

Page 36: 03 aritmetica  computacional

36Aritmética Computacional

Subtração

Na soma o primeiro CarryIn (vem 1) é 0. O que acontece de fizermos o primeiro

CarryIn = 1?

Page 37: 03 aritmetica  computacional

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.

Page 38: 03 aritmetica  computacional

38Aritmética Computacional

Símbolo Geral da UAL

Page 39: 03 aritmetica  computacional

39Aritmética Computacional

Problema

Qual é o problema de uma UAL projetada como a anterior?

Page 40: 03 aritmetica  computacional

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

Page 41: 03 aritmetica  computacional

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.

Page 42: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Multiplicação5

Page 43: 03 aritmetica  computacional

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.

Page 44: 03 aritmetica  computacional

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)

Page 45: 03 aritmetica  computacional

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

Page 46: 03 aritmetica  computacional

46Aritmética Computacional

Hardware: 1ª Versão

Page 47: 03 aritmetica  computacional

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

Page 48: 03 aritmetica  computacional

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.

Page 49: 03 aritmetica  computacional

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

Page 50: 03 aritmetica  computacional

50Aritmética Computacional

Hardware: 2ª Versão

Page 51: 03 aritmetica  computacional

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

Page 52: 03 aritmetica  computacional

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.

Page 53: 03 aritmetica  computacional

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

Page 54: 03 aritmetica  computacional

54Aritmética Computacional

Hardware: 3ª Versão

Vantagens:ULA de 32 bits. Apenas 1 registrador de 64 bits.

Page 55: 03 aritmetica  computacional

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

Page 56: 03 aritmetica  computacional

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

Page 57: 03 aritmetica  computacional

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

Page 58: 03 aritmetica  computacional

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

Page 59: 03 aritmetica  computacional

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

Page 60: 03 aritmetica  computacional

60Aritmética Computacional

Exercício

Dividir 0000 01112 por 00102. Valores iniciais:

Quociente = 0000Divisor = 0010 0000Resto = 0000 0111

Page 61: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Operações em Ponto Flutuante7

Page 62: 03 aritmetica  computacional

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.

Page 63: 03 aritmetica  computacional

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.

Page 64: 03 aritmetica  computacional

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.

Page 65: 03 aritmetica  computacional

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(

Page 66: 03 aritmetica  computacional

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

Page 67: 03 aritmetica  computacional

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.

Page 68: 03 aritmetica  computacional

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

Page 69: 03 aritmetica  computacional

69Aritmética Computacional

Exemplo

Converter a palavra abaixo em ponto flutuante para número

Page 70: 03 aritmetica  computacional

70Aritmética Computacional

Resposta

Page 71: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Lendas e Falhas8

Page 72: 03 aritmetica  computacional

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.

Page 73: 03 aritmetica  computacional

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.

Page 74: 03 aritmetica  computacional

74Aritmética Computacional

+

Resultado 0

OP0OP1

CarryInBInvertido

A0

B0

CarryOut

0

1

0

1

2