X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=ginac%2Finifcns_trans.cpp;h=49e30047f9f78485e84ff4d3650dfd737bc59ef9;hb=7550e991907e1bd8dad50bfdb5af2ff2f312af8f;hp=9982853961286be457af33ee445339aeb4651f65;hpb=47ecb72dce5ea9c917d1e1e77863c45a8b2b1bba;p=ginac.git diff --git a/ginac/inifcns_trans.cpp b/ginac/inifcns_trans.cpp index 99828539..49e30047 100644 --- a/ginac/inifcns_trans.cpp +++ b/ginac/inifcns_trans.cpp @@ -4,7 +4,7 @@ * functions. */ /* - * GiNaC Copyright (C) 1999-2016 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2020 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 @@ -197,7 +197,7 @@ static ex log_series(const ex &arg, // maybe substitution of rel into arg fails because of a pole try { arg_pt = arg.subs(rel, subs_options::no_pattern); - } catch (pole_error) { + } catch (pole_error &) { must_expand_arg = true; } // or we are at the branch point anyways @@ -265,8 +265,12 @@ static ex log_series(const ex &arg, const ex &point = rel.rhs(); const symbol foo; const ex replarg = series(log(arg), s==foo, order).subs(foo==point, subs_options::no_pattern); - epvector seq { expair(-I*csgn(arg*I)*Pi, _ex0), - expair(Order(_ex1), order) }; + epvector seq; + if (order > 0) { + seq.reserve(2); + seq.push_back(expair(-I*csgn(arg*I)*Pi, _ex0)); + } + seq.push_back(expair(Order(_ex1), order)); return series(replarg - I*Pi + pseries(rel, std::move(seq)), rel, order); } throw do_taylor(); // caught by function::series() @@ -928,8 +932,12 @@ static ex atan_series(const ex &arg, Order0correction += log((I*arg_pt+_ex_1)/(I*arg_pt+_ex1))*I*_ex_1_2; else Order0correction += log((I*arg_pt+_ex1)/(I*arg_pt+_ex_1))*I*_ex1_2; - epvector seq { expair(Order0correction, _ex0), - expair(Order(_ex1), order) }; + epvector seq; + if (order > 0) { + seq.reserve(2); + seq.push_back(expair(Order0correction, _ex0)); + } + seq.push_back(expair(Order(_ex1), order)); return series(replarg - pseries(rel, std::move(seq)), rel, order); } throw do_taylor(); @@ -1534,8 +1542,12 @@ static ex atanh_series(const ex &arg, Order0correction += log((arg_pt+_ex_1)/(arg_pt+_ex1))*_ex1_2; else Order0correction += log((arg_pt+_ex1)/(arg_pt+_ex_1))*_ex_1_2; - epvector seq { expair(Order0correction, _ex0), - expair(Order(_ex1), order) }; + epvector seq; + if (order > 0) { + seq.reserve(2); + seq.push_back(expair(Order0correction, _ex0)); + } + seq.push_back(expair(Order(_ex1), order)); return series(replarg - pseries(rel, std::move(seq)), rel, order); } throw do_taylor();