fasttimes bug



Try  fasttimes(rat(1,x), rat(x)).

Fasttimes may not be especially fast, depending on your inputs.  You 
should test it to see if it helps your application.
It was not intended to be generally useful, but simply an interface to a 
program that might be worth testing,
a "Karatsuba" style multiplier.  If you need to multiply many  large and 
dense polynomials fast,
there are lots of other methods around (not all in Maxima).

Fabrizio Caruso wrote:
> Hi
>
> fasttimes has a very old bug which makes it less usable
> because it won't work if its first argument is $rat(1)$
> because
> (1) rat(1) is given an empty list of variables
> unless it has been the result of some computation
> involving some variables;
> (2) fasttimes assumes that list of variables of the product
> should be the same as the one of its first argument
> instead of taking the union of the variables of both arguments
>
>
> In fact we have:
>
> (%i324) 
> fasttimes(rat(1),rat(x));
> Use `fasttimes' only on CRE polynomials with same varlists
>   -- an error.  To debug this try debugmode(true);
> (%i325) fasttimes(rat(x),rat(1));
> Evaluation took 0.00 seconds (0.00 elapsed) using 776 bytes.
> (%o325)/R/                             x
> (%i326)
>
>
> Despite the fact that rat(1) should be the same as remainder(1,rat(x))
> they are different when used inside fasttimes because it seems
> that remainder give to "1" the right list of variables
>
>
> (%i328) rat(1);
> Evaluation took 0.00 seconds (0.00 elapsed) using 232 bytes.
> (%o328)/R/                             1
> (%i329) remainder(rat(1),rat(x));
> Evaluation took 0.00 seconds (0.00 elapsed) using 1.070 KB.
> (%o329)/R/                             1
> (%i330) is(%=%o328);
> Evaluation took 0.00 seconds (0.00 elapsed) using 600 bytes.
> (%o330)                              true
> (%i331) fasttimes(remainder(rat(1),rat(x)),rat(x));
> Evaluation took 0.00 seconds (0.00 elapsed) using 1.523 KB.
> (%o331)/R/                             x
>
>
>
> Its code is in ratout.lisp but I am not enough Lisp savy to debug it
>
> (defmfun $fasttimes (x y)
>    (cond ((and (not (atom x)) (not (atom y))
>                (equal (car x) (car y)) (equal (caar x) 'mrat)
>                (equal (cddr x) 1) (equal (cddr y) 1))
>           (cons (car x)(cons (fptimes (cadr x)(cadr y))1)))
>          (t (merror "Use `fasttimes' only on CRE polynomials with same 
> varlists"))))
>
>
>
> Any suggestions on how to fix it other than circumvent it?
> Possibly a fix in the Lisp code?
>
>     Fabrizio
>
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>