[PPL-devel] [GIT] ppl/ppl(bounded_arithmetic): Adjusting function or_assign for the check the boundary.

Alberto Gioia alberto.gioi1 at studenti.unipr.it
Mon May 2 16:32:58 CEST 2011


Module: ppl/ppl
Branch: bounded_arithmetic
Commit: 8b5e4a33eab4d8b13a830ebffe806ffdfea7c7c7
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=8b5e4a33eab4d8b13a830ebffe806ffdfea7c7c7

Author: Alberto Gioia <alberto.gioi1 at studenti.unipr.it>
Date:   Mon May  2 16:00:29 2011 +0200

Adjusting function or_assign for the check the boundary.

---

 src/Interval.inlines.hh |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/Interval.inlines.hh b/src/Interval.inlines.hh
index 5d37ff4..e5c480b 100644
--- a/src/Interval.inlines.hh
+++ b/src/Interval.inlines.hh
@@ -682,13 +682,16 @@ Interval<To_Boundary, To_Info>::or_assign(const From1& x, const From2& y) {
   max(x,y) <= OR(x,y) <= x+y 
   */
   if (xls >= 0 && yls >=0) {
+    if ((f_upper(x) > INT_MAX || f_upper(y) > INT_MAX || 
+         (f_upper(x) + f_upper(y)) > INT_MAX))
+      return assign(EMPTY);
     rl = max_assign(LOWER, lower(), to_info,
                     LOWER, f_lower(x), f_info(x),
                     LOWER, f_lower(y), f_info(y));
-    
+   
     ru = Boundary_NS::add_assign(UPPER, upper(), to_info,
-                                 UPPER, f_upper(x), f_info(x),
-                                 UPPER, f_upper(y), f_info(y));
+                                   UPPER, f_upper(x), f_info(x),
+                                   UPPER, f_upper(y), f_info(y));
 
   }
   /*
@@ -702,7 +705,7 @@ Interval<To_Boundary, To_Info>::or_assign(const From1& x, const From2& y) {
     Boundary_NS::assign(LOWER, to_lower1, to_info1,
                         LOWER, f_lower(x), f_info(x));
 
-    if (xls < 0)//to_lower1 < 0)
+    if (xls < 0)
       Boundary_NS::neg_assign(LOWER, to_lower1, to_info1,
                               LOWER, to_lower1, to_info1);
 
@@ -730,7 +733,11 @@ Interval<To_Boundary, To_Info>::or_assign(const From1& x, const From2& y) {
   ((x+y)-(x-y))/2 <= OR(x,y) <= -1
   */ 
   else {
-    Boundary_NS::assign(LOWER,to_lower1,to_info1,
+    if ((f_lower(x) < -INT_MAX || f_lower(y) < -INT_MAX ||
+        (f_lower(x) - f_lower(y)) < -INT_MAX))
+      return assign(EMPTY);
+
+    Boundary_NS::assign(LOWER, to_lower1,to_info1,
                         LOWER, f_lower(Constant<2>::value),f_info(Constant<2>::value));
 
     Boundary_NS::add_assign(LOWER, to_lower2, to_info2,




More information about the PPL-devel mailing list