Multiplicação de Inteiros Grandes

Propaganda
Multiplicação de
Inteiros Grandes
Prof.ª Leticia Rittner
Prof.º Romis R. de Faissol Attux
Leandro Aparecido Sangalli (PED)
EA075 – Introdução ao Projeto de Sistemas Embarcados
Relembrando
●
Multiplicação: a multiplicação de dois inteiros
A e B ambos de tamanho n bits resulta em um
inteiro C de até 2n bits.
–
Exemplo: Se A e B são de 8 bits. Então,
C = A*B tem no máximo 16 bits.
●
Problema: processadores de capacidade
máxima w bits (w menor ou igual a n) não são
capazes de efetuar este tipo de multiplicação
utilizando uma simples instrução de MUL.
Método de Multiplicação (Escolar)
●
●
●
●
Exemplo:
Base do método: multiplicação e adição
símbolo-a-símbolo.
Custo: 9 multiplicações + 6 adições, todas
símbolo-a-símbolo.
Complexidade: n² operações símbolo-asímbolo.
Multiplicação em Hexadecimal
●
255 = 11111111 = 1111 1111 = 0xFF (Hex).
●
Lembrando que, FXF = 15X15 = 225 = E1
Multiplicação em Blocos
●
O método escolar de multiplicação pode ser
adaptado para operar bloco-a-bloco, ao invés de
símbolo-a-símbolo.
–
●
Cada bloco é constituído por w bits, onde
normalmente w é o tamanho da palavra do
processador.
Exemplo: seja X e Y ambos de dois blocos.
Então, Z = X*Y possui quatro blocos.
–
Este exemplo é similar ao caso da multiplicação
hexadecimal apresentado anteriormente,
supondo que cada bloco seja de 4 bits.
Multiplicação em Blocos (Cont.)
Multiplicação em Blocos (Cont.)
●
Testando a multiplicação em blocos
–
Calcule a multiplicação de X = 255 por Y = 255,
utilizando o método de multiplicação em blocos,
onde cada bloco é de 4 bits (Versão binária).
–
Resposta: 1111111000000001
–
Relembrando:
●
●
●
●
0+0=0
1+0=1
0+1=1
1 + 1 = 0 (Carry)
Multiplicação em Blocos (Cont.)
●
A complexidade do algoritmo de multiplicação
em blocos também é n².
–
●
Desconsiderando o custo das operações de
adição e shifts.
Existem outros algoritmos para efetuar
aritmética de múltipla precisão.
–
Exemplo: Karatsuba, Toom-Cook, entre
outros.
●
Toom-Cook tem complexidade menor que n²
Dicas para a Atividade 3
●
●
Relembrando: multiplicar A e B ambos de 64
bits, obtendo como resultado um número C de
128 bits.
Primeiramente, se for utilizado a base de
representação hexadecimal isto facilita a
aplicação do método de multiplicação em
blocos nesse problema.
–
●
Ou seja, primeiramente devemos converter A e
B para hexadecimal (divisões por 16).
Vale ressaltar que o objetivo da atividade não é
eficiência. Por isso, é sugerido a utilização do
método de multiplicação em blocos (simples).
Dicas para a Atividade 3 (Cont.)
●
●
Como A e B são ambos de 64 bits, estes podem
ser divididos em dois blocos de 32 bits cada, já
que o simulador ARMSim# opera com
instruções de 32 bits.
Porém, neste ponto encontramos um problema.
–
O produto de dois blocos de 32 bits gera um
bloco de 64 bits. Porém este bloco não pode
ser armazenado, já que os registradores são
de 32 bits cada.
–
Solução: instrução especial de multiplicação.
UMULL: partes mais e menos significativas.
Download