sexta-feira, 28 de março de 2014

Aprendendo a somar e a multiplicar

Você certamente se lembra dos clássicos métodos aprendido no antigo Primário (atual Ensino Fundamental I) para se somar ou multiplicar dois números inteiros, certo? Pois eu resolvi implementá-los em R. Transformar o número em um vetor de dígitos, realizar a soma ou a multiplicação "manualmente", e retornar um vetor de dígitos.

"Ora, mas por quê?" Porque aparecerão problemas envolvendo números muito grandes, e o R possui limitação de tamanho para números inteiros. Um número inteiro pode ser armazenado de maneira exata até 2147483647, que é 2^31 - 1. Acima disso, ainda podemos trabalhar com os números, porém podem haver erros nos cálculos (o próprio R lança warnings quando for o caso - é comum, por exemplo, com divisões inteiras). Existem bibliotecas que lidam bem com números de tamanho arbitrário (o clássico GMP de décadas, Rmpfr, Brobdingnag, talvez existam outras), mas resolvi encarar o desafio à minha maneira. A seguir, respectivamente, soma e multiplicação:



No caso da soma, a idéia básica é completar o menor número (em número de dígitos) com zeros à esquerda e, então, somar termo-a-termo, não esquecendo de levar para o termo seguinte eventuais somas com resultado maior ou igual a 10. Considero o vetor reverso (ou seja, de trás pra frente) nos cálculos apenas para não ter que ficar "passeando" do último ao primeiro elemento, mas sim do primeiro ao último. Questão de gosto pessoal.

No caso da multiplicação, também faço como aprendemos quando éramos crianças primárias: multiplico o número de cima por cada algarismo do número de baixo, depois vou colocando zeros nos resultados, por fim somo tudo.

O próximo problema lançará mão dessas artimanhas...

Nenhum comentário:

Postar um comentário