From: Chris Dams Date: Tue, 14 Mar 2006 18:54:55 +0000 (+0000) Subject: Vlamirs patch for automatically simplifying e.g., csgn(x)^3 -> csgn(x). X-Git-Tag: release_1-4-0~102 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=commitdiff_plain;h=ae7c2d39ba090f4425995d0d1eb9fff1c91a9489;p=ginac.git Vlamirs patch for automatically simplifying e.g., csgn(x)^3 -> csgn(x). --- diff --git a/ginac/inifcns.cpp b/ginac/inifcns.cpp index 47252a8f..a8f82d8e 100644 --- a/ginac/inifcns.cpp +++ b/ginac/inifcns.cpp @@ -252,10 +252,23 @@ static ex csgn_conjugate(const ex& arg) return csgn(arg); } +static ex csgn_power(const ex & arg, const ex & exp) +{ + if (is_a(exp) && exp.info(info_flags::positive) && ex_to(exp).is_integer()) { + if (ex_to(exp).is_odd()) + return csgn(arg); + else + return power(csgn(arg), _ex2).hold(); + } else + return power(csgn(arg), exp).hold(); +} + + REGISTER_FUNCTION(csgn, eval_func(csgn_eval). evalf_func(csgn_evalf). series_func(csgn_series). - conjugate_func(csgn_conjugate)); + conjugate_func(csgn_conjugate). + power_func(csgn_power)); //////////