INF1018 - Software Básico - 2009.2

Primeiro Trabalho

Manipulação de inteiros grandes

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!

Avaliação

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.

Prazo: 25/09


Observações