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