From 50ed15a65e858858999be45301b3f49821cb1e71 Mon Sep 17 00:00:00 2001 From: Alexei Sheplyakov Date: Sat, 3 Aug 2013 17:01:42 +0300 Subject: [PATCH] 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. --- ginac/flags.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 }; }; -- 2.44.0