Programação com números inteiros gigantes
Quanto é o fatorial de 5? 120, fácil, não? E quanto é o fatorial de 6000? É um número com 20 mil dígitos. És capaz de escrever um programa que calcule isto? Depois de ler este artigo, você será!
Parte 6: Conclusão
Eu até tentei, no passado, construir a minha biblioteca, mas foi um fracasso. O meu BIG_Add eu até implementei com eficiência, mas o BIG_mul era um terror. Nunca nem tentei implementar a divisão, módulo e tudo o mais.
O fato é que já existem bibliotecas muito boas e completas para C, bem como classes para as linguagens orientadas a objetos. OpenSSL não é uma biblioteca para números grandes. É uma biblioteca para fornecer algoritmos de criptografia para os desenvolvedores. Porém, como muitos algoritmos exigem cálculos com números além da capacidade da ULA, uma coleção de funções eficientes que manipulam tais números foi também criada.
Não foi minha intenção, em nenhum momento, a de realizar algum comparativo de desempenho entre as linguagens que citei, até porque cada especialista em determinada linguagem pode ter artifícios para otimizar o código. No entanto, só para ter uma pequena comparação, realizei alguns testes com as três linguagens, python, java e C.
Nestes meus testes observei que um tempo considerável é gasto na impressão do resultado, já que o mesmo, em alguns casos, possui centenas de milhares de dígitos. Assim, nas três linguagens, eu realizei os seguintes testes:
O fato é que já existem bibliotecas muito boas e completas para C, bem como classes para as linguagens orientadas a objetos. OpenSSL não é uma biblioteca para números grandes. É uma biblioteca para fornecer algoritmos de criptografia para os desenvolvedores. Porém, como muitos algoritmos exigem cálculos com números além da capacidade da ULA, uma coleção de funções eficientes que manipulam tais números foi também criada.
Não foi minha intenção, em nenhum momento, a de realizar algum comparativo de desempenho entre as linguagens que citei, até porque cada especialista em determinada linguagem pode ter artifícios para otimizar o código. No entanto, só para ter uma pequena comparação, realizei alguns testes com as três linguagens, python, java e C.
Nestes meus testes observei que um tempo considerável é gasto na impressão do resultado, já que o mesmo, em alguns casos, possui centenas de milhares de dígitos. Assim, nas três linguagens, eu realizei os seguintes testes:
- com impressão da resposta, ou seja, o programa imprime o fatorial na tela;
- sem a impressão da resposta, isto é, o programa apenas calcula e nada imprime.
Para os iniciantes em C (como eu) isto é de grande ajuda.
Agora finalmente vou conseguir implementar meu código de forma eficiente para tentar vencer seu próximo desafio... :-)
[]s
Cloves Jr