From a50cca9ebc390b6ba1d2f17f03bd18ebea7fb970 Mon Sep 17 00:00:00 2001 From: Christian Bauer Date: Thu, 23 Mar 2000 21:50:38 +0000 Subject: [PATCH 1/1] - raised coefficient bit-length limit in heur_gcd() (CLN is good with large numbers, so this improves performance) --- ginac/normal.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ginac/normal.cpp b/ginac/normal.cpp index 85240060..fffdc925 100644 --- a/ginac/normal.cpp +++ b/ginac/normal.cpp @@ -811,6 +811,8 @@ ex ex::primpart(const symbol &x, const ex &c) const static ex sr_gcd(const ex &a, const ex &b, const symbol *x) { +//clog << "sr_gcd(" << a << "," << b << ")\n"; + // Sort c and d so that c has higher degree ex c, d; int adeg = a.degree(*x), bdeg = b.degree(*x); @@ -1021,6 +1023,9 @@ class gcdheu_failed {}; static ex heur_gcd(const ex &a, const ex &b, ex *ca, ex *cb, sym_desc_vec::const_iterator var) { +//clog << "heur_gcd(" << a << "," << b << ")\n"; + + // Trivial cases if (is_ex_exactly_of_type(a, numeric) && is_ex_exactly_of_type(b, numeric)) { numeric g = gcd(ex_to_numeric(a), ex_to_numeric(b)); numeric rg; @@ -1053,8 +1058,10 @@ static ex heur_gcd(const ex &a, const ex &b, ex *ca, ex *cb, sym_desc_vec::const // 6 tries maximum for (int t=0; t<6; t++) { - if (xi.int_length() * maxdeg > 50000) + if (xi.int_length() * maxdeg > 100000) { +//clog << "giving up heur_gcd, xi.int_length = " << xi.int_length() << ", maxdeg = " << maxdeg << endl; throw gcdheu_failed(); + } // Apply evaluation homomorphism and calculate GCD ex gamma = heur_gcd(p.subs(*x == xi), q.subs(*x == xi), NULL, NULL, var+1).expand(); -- 2.44.0