Introduce expand_options::expand_transcendental.
authorVladimir V. Kisil <kisilv@maths.leeds.ac.uk>
Sat, 2 Nov 2013 19:06:53 +0000 (21:06 +0200)
committerAlexei Sheplyakov <Alexei.Sheplyakov@gmail.com>
Sun, 3 Nov 2013 20:33:45 +0000 (22:33 +0200)
In general expand() treats the argument as a rational expression (and
leave transcendental functions as they are). However sometimes it's
convenient to expand transcendental functions too, like

log(a*b) = log(a) + log(b)
exp(a + b) = exp(a)*exp(b)

Applying such transformation by default doesn't seem to be a smart idea
(think of log(p^2/mu^2) transformed to 2*log(p) - 2*log(mu)). Therefore
introduce expand_options::expand_transcendental. As the name implies expand()
tries to transform transcendental functions only if this flag is set.

Signed-off-by: Vladimir V. Kisil <kisilv@maths.leeds.ac.uk>
ginac/flags.h

index 3d398cf..6da71b0 100644 (file)
@@ -31,7 +31,8 @@ public:
        enum {
                expand_indexed = 0x0001,      ///< expands (a+b).i to a.i+b.i
                expand_function_args = 0x0002, ///< expands the arguments of functions
-               expand_rename_idx = 0x0004 ///< used internally by mul::expand()
+               expand_rename_idx = 0x0004, ///< used internally by mul::expand()
+               expand_transcendental = 0x0008 ///< expands trancendental functions like log and exp
        };
 };