X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fadd.cpp;h=a32ae8036a4c29f17591d69be30b90afdf38e80c;hp=74c8d815ca1a6fe0fd197138a86b18c0f8ab8232;hb=00d612ce3789ba9240ade1b8bf06b26c326bd8f2;hpb=1b8bcb068171ce9d5c8202ae3c76647b65c9a06d diff --git a/ginac/add.cpp b/ginac/add.cpp index 74c8d815..a32ae803 100644 --- a/ginac/add.cpp +++ b/ginac/add.cpp @@ -331,7 +331,7 @@ ex add::coeff(const ex & s, int n) const ex add::eval(int level) const { epvector evaled = evalchildren(level); - if (!evaled.empty()) { + if (unlikely(!evaled.empty())) { // do more evaluation later return (new add(std::move(evaled), overall_coeff))-> setflag(status_flags::dynallocated); @@ -538,6 +538,8 @@ expair add::split_ex_to_pair(const ex & e) const if (is_exactly_a(e)) { const mul &mulref(ex_to(e)); const ex &numfactor = mulref.overall_coeff; + if (numfactor.is_equal(_ex1)) + return expair(e, _ex1); mul *mulcopyp = new mul(mulref); mulcopyp->overall_coeff = _ex1; mulcopyp->clearflag(status_flags::evaluated); @@ -555,6 +557,8 @@ expair add::combine_ex_with_coeff_to_pair(const ex & e, if (is_exactly_a(e)) { const mul &mulref(ex_to(e)); const ex &numfactor = mulref.overall_coeff; + if (numfactor.is_equal(_ex1)) + return expair(e, c); mul *mulcopyp = new mul(mulref); mulcopyp->overall_coeff = _ex1; mulcopyp->clearflag(status_flags::evaluated); @@ -562,13 +566,13 @@ expair add::combine_ex_with_coeff_to_pair(const ex & e, mulcopyp->setflag(status_flags::dynallocated); if (c.is_equal(_ex1)) return expair(*mulcopyp, numfactor); - else if (numfactor.is_equal(_ex1)) - return expair(*mulcopyp, c); else return expair(*mulcopyp, ex_to(numfactor).mul_dyn(ex_to(c))); } else if (is_exactly_a(e)) { if (c.is_equal(_ex1)) return expair(e, _ex1); + if (e.is_equal(_ex1)) + return expair(c, _ex1); return expair(ex_to(e).mul_dyn(ex_to(c)), _ex1); } return expair(e, c);