From 70ff69a60159e7174928ac7603b33ce8dd5851fa Mon Sep 17 00:00:00 2001 From: Jens Vollinga Date: Sat, 27 Mar 2004 14:30:40 +0000 Subject: [PATCH] Synced to 1.2 --- check/exam_pseries.cpp | 4 ++++ ginac/pseries.cpp | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/check/exam_pseries.cpp b/check/exam_pseries.cpp index 7b447346..7ec803f8 100644 --- a/check/exam_pseries.cpp +++ b/check/exam_pseries.cpp @@ -115,6 +115,10 @@ static unsigned exam_series1() + Order(pow(x, 2)); result += check_series(e, 0, d, 2); + e = sqrt(1+x*x) * sqrt(1+2*x*x); + d = 1 + Order(pow(x, 2)); + result += check_series(e, 0, d, 2); + symbol a("a"); e = pow(x, 4) * sin(a) + pow(x, 2); d = pow(x, 2) + Order(pow(x, 3)); diff --git a/ginac/pseries.cpp b/ginac/pseries.cpp index d799e62b..1efbb65d 100644 --- a/ginac/pseries.cpp +++ b/ginac/pseries.cpp @@ -784,10 +784,15 @@ ex mul::series(const relational & r, int order, unsigned options) const const epvector::const_iterator itbeg = seq.begin(); const epvector::const_iterator itend = seq.end(); for (epvector::const_iterator it=itbeg; it!=itend; ++it) { - + ex buf = recombine_pair_to_ex(*it); - - int real_ldegree = buf.expand().ldegree(sym-r.rhs()); + + int real_ldegree = 0; + try { + real_ldegree = buf.expand().ldegree(sym-r.rhs()); + } + catch (std::runtime_error) {} + if (real_ldegree == 0) { int orderloop = 0; do { @@ -800,7 +805,13 @@ ex mul::series(const relational & r, int order, unsigned options) const } int degsum = std::accumulate(ldegrees.begin(), ldegrees.end(), 0); - + + if (degsum>order) { + epvector epv; + epv.push_back(expair(Order(_ex1), order)); + return (new pseries(r, epv))->setflag(status_flags::dynallocated); + } + // Multiply with remaining terms std::vector::const_iterator itd = ldegrees.begin(); for (epvector::const_iterator it=itbeg; it!=itend; ++it, ++itd) { -- 2.45.1