* Implementation of GiNaC's products of expressions. */
/*
- * GiNaC Copyright (C) 1999-2006 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2007 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
c.s << "(";
if (!overall_coeff.is_equal(_ex1)) {
- overall_coeff.print(c, precedence());
- c.s << "*";
+ if (overall_coeff.is_equal(_ex_1))
+ c.s << "-";
+ else {
+ overall_coeff.print(c, precedence());
+ c.s << "*";
+ }
}
// Print arguments, separated by "*" or "/"
epvector::const_iterator i = seq.begin(), end = seq.end();
while (i != end) {
if (ex_to<numeric>(i->coeff).is_integer())
- deg_sum += i->rest.degree(s) * ex_to<numeric>(i->coeff).to_int();
+ deg_sum += recombine_pair_to_ex(*i).degree(s);
+ else {
+ if (i->rest.has(s))
+ throw std::runtime_error("mul::degree() undefined degree because of non-integer exponent");
+ }
++i;
}
return deg_sum;
epvector::const_iterator i = seq.begin(), end = seq.end();
while (i != end) {
if (ex_to<numeric>(i->coeff).is_integer())
- deg_sum += i->rest.ldegree(s) * ex_to<numeric>(i->coeff).to_int();
+ deg_sum += recombine_pair_to_ex(*i).ldegree(s);
+ else {
+ if (i->rest.has(s))
+ throw std::runtime_error("mul::ldegree() undefined degree because of non-integer exponent");
+ }
++i;
}
return deg_sum;
retry1:
int nummatches = std::numeric_limits<int>::max();
std::vector<bool> currsubsed(seq.size(), false);
- bool succeed = true;
lst repls;
if(!algebraic_match_mul_with_mul(*this, it->first, repls, 0, nummatches, subsed, currsubsed))