[GiNaC-list] normal() bug-or-feature
Sheplyakov Alexei
varg at thsun1.jinr.ru
Thu Nov 18 15:12:04 CET 2004
Hello!
On Thu, Nov 18, 2004 at 01:51:03PM +0100, Christian Bauer wrote:
> > symbol m1("m1");
> > symbol m2("m2");
> > symbol x("x");
> > ex e1 = pow(x,2)*pow(m1,2) - pow(x,2)*pow(m2,2);
> > ex e2 = pow(pow(x,2)*pow(m1,2)-pow(x,2)*pow(m2,2),100);
> > ex ca, cb, gc;
> > gc = gcd(e1, e2, &ca, &cb, false);
> > cout << c2 << endl;
> > // this won't be just x^198*(m1^2-m2^2)^99.
> > // (m1^2-m2^2)^99 gets expanded.
> > cout << (e1/e2).normal() << endl;
> > // won't print just x^(-198)*(m1^2-m2^2)^(-99),
> > // (m1^2-m2^2)^99 gets expanded
I'm sorry, there is a small error in my previous post, e1 should be
ex e1 = pow(x,2)*pow(m2,2) - pow(x,2)*pow(m1,2);
> I'm getting ca = 1,
> cb = (-m2^2*x^2+m1^2*x^2)^99,
I'm getting the same with e1 = x^2*m1^2 - x^2*m2^2.
But with e1 = x^2*m2^2 - x^2*m1^2
ca = -1
cb = x^198*[expanded (m1^2-m2^2)^99]
> and e1/e2 gets simplified to (-m2^2*x^2+m1^2*x^2)^(-99)
> by power::eval() even before normal() is invoked.
In ginsh:
$ test = (x^2*m2^2-x^2*m1^2)/(x^2*m1^2-x^2*m2^2)^100;
(-x^2*m1^2+x^2*m2^2)*(x^2*m1^2-x^2*m2^2)^(-100)
$ test2 = (x^2*m1^2-x^2*m2^2)/(x^2*m1^2-x^2*m2^2)^100;
(x^2*m1^2-x^2*m2^2)^(-99)
> Besides, gcd() already has heuristics for the cases b==a^n (or a==b^n).
Unfortunately, gcd() does not play well with a==e*something^n (e is
something simple, n >> 1), as my example demonstrates.
> Hm, which version of GiNaC are you using?
I use GiNaC 1.3.0 from CVS.
Thanks,
Alexei.
More information about the GiNaC-list
mailing list