O objetivo deste trabalho é construir uma biblioteca para manipulação de inteiros grandes de 128 bits. A biblioteca deverá prover as operações aritméticas básicas (somar, subtrair, multiplicar, dividir) e operações de entrada e saída.
A biblioteca deve ser implementada em C, usando a seguinte definição
para o tipo do inteiro grande:
#define NUM_BYTES 16 typedef unsigned char BigInt[NUM_BYTES];
Ou seja, uma variável do tipo BigInt é representada por este array,
que deve ser interpretado como um único inteiro de 128 bits, em
complemento a dois, seguindo a ordem little-endian. Desta forma, o
inteiro
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
(igual a -2) é representado
pelo array:
{0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF}
As funções devem seguir os protótipos a seguir:
/* Operacoes basicas */
/* res = a + b */ void bi_sum (BigInt res, BigInt a, BigInt b);
/* res = a - b */ void bi_sub (BigInt res, BigInt a, BigInt b);
/* res = a * b */ void bi_mul (BigInt res, BigInt a, BigInt b);
/* res = a / b */ void bi_div (BigInt res, BigInt a, BigInt b);
/* desloca a de n bits para a direita e grava resultado em res */ void bi_shr (BigInt res, BigInt a, int n); /* desloca a de n bits para a esquerda e grava resultado em res */ void bi_shl (BigInt res, BigInt a, int n);
O produto deste trabalho deve ser um arquivo em C com nome "bigint.c" contendo apenas a implementação das seis funções acima. Dê um #include no seguinte arquivo bigint.h para as prototipações.
Recomendação: Construa suas funções uma a uma e vá testando-as
aos poucos, em vez de escrever o código todo de uma vez sem testar as
funções individualmente.
É receita de desgraça certa deixar para testar tudo no final!
Para a correção, as funções serão chamadas de uma rotina main de teste, por isto não inclua uma main no seu trabalho.
Não se esqueça de testar bem seu programa antes de entregá-lo!
Algumas das operações possuem uma implementação evidente, enquanto
que outras requerem um pouco
mais de investigação.
Por este motivo, os trabalhos também serão julgados pela sua eficiência.