No clisp (com a rotina interna) demora bem menos: 1.75 s. Mas demora bem mais do que 5s para imprimir o resultado :P. No ECL (com essa mesma função que o Pedro mostrou), são apenas 0.59 s, e o resultado é impresso instantaneamente.
O ECL é razoavelmente rápido mas não é muito otimizado no geral (ainda não), mas ele usa a GNU GMP, que é muito rápida, e parece que o clisp também usa. A implementação de bignums do SBCL não é a melhor possível, embora já seja bem melhor que a do CCL. Eu até hackeei o SBCL e criei uma função que calcula quadrados de bignums e que é até 40% mais rápida se o número for bem grande (se me lembro bem, a partir de 2^(2^15) ). 2009/4/29 namekuseijin <[email protected]> > > Compilado e programando assembly em Lisp. Assim não vale! ;) A única função "assembly" que ele usou foi o ash, que é o shift. A maioria das vezes ele poderia ter substituído por * e floor facilmente (e o SBCL otimizaria isso para chamadas da função ash mesmo assim). Só acho que o SBCL não otimizaria a última chamada. De qualquer forma, ainda acho um resultado bem válido. > > > On Apr 29, 6:10 pm, [email protected] (Pedro Kröger) wrote: > > namekuseijin <[email protected]> writes: > > > até 1000 aqui no DrScheme em um Core 2 Duo é praticamente instantâneo. > > > 20000 são cerca de 2 segundos. Faz 100.000! em 1 minuto. A evolução > > > das máquinas é fantástica :) > > > > a evolução dos algoritimos tambem, o seguinte codigo demora 5.341 > > segundos na minha maquina para n=100000 com sbcl ;-) > > > > (defun ! (n) > > (let ((shift 0)) > > (labels ((fact1 (n m) > > (cond > > ((and (evenp n) (> m 1)) > > (incf shift (ash n -1)) > > (fact1 (ash n -1) (ash m -1))) > > ((<= n m) n) > > (t (* (fact1 n (ash m 1)) (fact1 (- n m)(ash m 1))))))) > > (ash (fact1 n 1) shift)))) > > > > pedro > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lisp-br" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/lisp-br?hl=en -~----------~----~----~----~------~----~------~--~---
