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.17.2