[GiNaC-list] gcd: wrong sign of cofactor (heur_gcd is broken?)
Jens Vollinga
vollinga at thep.physik.uni-mainz.de
Wed May 4 17:01:26 CEST 2005
Hi,
thanks for the patch! It has been applied.
Regards,
Jens
On Tue, Mar 22, 2005 at 03:33:08PM +0300, Sheplyakov Alexei wrote:
> Hello!
>
> This simple program fails:
>
> #include <iostream>
> #include <stdexcept>
> #include <cassert>
> #include <ginac/ginac.h>
> using namespace std;
> using namespace GiNaC;
>
> int main(int argc, char** argv)
> {
> symbol x("x");
> symbol y("y");
> ex a = pow(x,2) - pow(y,2);
> ex b = pow(x,4) - pow(y, 4);
> ex ca, cb;
> cout << "GCD(" << a << ", " << b << ") = ";
> ex ab_gcd = gcd(a, b, &ca, &cb, false);
> cout << ab_gcd << endl;
> assert((a-ca*ab_gcd).expand().is_zero());
> assert((b-cb*ab_gcd).expand().is_zero());
> return 0;
> }
>
> Documentation (normal.cpp:1256) says
> \begin{quote}
> /*
> * Compute GCD (Greatest Common Divisor) of multivariate
> * polynomials a(X) and b(X) in Z[X]. Optionally also compute
> * the cofactors of a and b, defined by a = ca * gcd(a, b)
> * and b = cb * gcd(a, b).
> */
> \end{quote}
>
> so this behaviour is probably a bug.
>
> I've got a patch to fix it (see attachment #1), but I'm not sure if
> it is correct.
>
> Relevant part of gdb session is attached too.
>
> P.S.
>
> I use GiNaC 1.3.1 from CVS, g++-3.4 from Debian testing.
>
>
> --
> Best regards,
> Alexei
More information about the GiNaC-list
mailing list