From: Alexei Sheplyakov Date: Sat, 3 Aug 2013 14:01:42 +0000 (+0300) Subject: Introduce status_flags::{is_positive,is_negative,purely_indefinite} X-Git-Tag: release_1-6-3~43 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=50ed15a65e858858999be45301b3f49821cb1e71 Introduce status_flags::{is_positive,is_negative,purely_indefinite} Quite a number of transformations can be applied if the expression is known to be positive (negative) (for instance, sqrt(x^2*y^2) = x*y if x >= 0 and y >= 0). However the check itself might be quite expensive. Hence a few status_flags are introduced to cache the result. --- diff --git a/ginac/flags.h b/ginac/flags.h index 8f8f25df..e38d9c58 100644 --- a/ginac/flags.h +++ b/ginac/flags.h @@ -196,7 +196,10 @@ public: hash_calculated = 0x0008, ///< .calchash() has already done its job not_shareable = 0x0010, ///< don't share instances of this object between different expressions unless explicitly asked to (used by ex::compare()) has_indices = 0x0020, - has_no_indices = 0x0040 // ! (has_indices || has_no_indices) means "don't know" + has_no_indices = 0x0040, // ! (has_indices || has_no_indices) means "don't know" + is_positive = 0x0080, + is_negative = 0x0100, + purely_indefinite = 0x0200 // If set in a mul, then it does not contains any terms with determined signs, used in power::expand() }; }; @@ -256,7 +259,10 @@ public: idx, // answered by classes numeric, symbol, add, mul, power - expanded + expanded, + + // is meaningful for mul only + indefinite }; };