lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master cb16682 10/14: Make i7702 vector assignments


From: Greg Chicares
Subject: [lmi-commits] [lmi] master cb16682 10/14: Make i7702 vector assignments idempotent
Date: Thu, 1 Apr 2021 18:15:18 -0400 (EDT)

branch: master
commit cb16682324113f265e625d9b73ec4ec1c769e003
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Make i7702 vector assignments idempotent
    
    This is a compelling use case for operator<<=() instead of operator+().
---
 i7702.cpp      | 12 ++++++------
 i7702_init.cpp |  8 ++++----
 i7702_test.cpp |  4 ++++
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/i7702.cpp b/i7702.cpp
index b3b70f7..808b661 100644
--- a/i7702.cpp
+++ b/i7702.cpp
@@ -267,7 +267,7 @@ void i7702::initialize()
 {
     assert_preconditions();
     // max(A0, B, C)
-    ic_usual_ += Max
+    ic_usual_ <<= Max
         (Max
             ((Max(A0_, Max(Bgen_, Cgen_))        ) * use_gen_
             ,(Max(A0_, Max(Bsep_, Csep_))        ) * use_sep_
@@ -278,7 +278,7 @@ void i7702::initialize()
             )
         );
     // max(A0, B   ) - D
-    ic_glp_   += Max
+    ic_glp_   <<= Max
         (Max
             ((Max(A0_,     Bgen_        ) - Dgen_) * use_gen_
             ,(Max(A0_,     Bsep_        ) - Dsep_) * use_sep_
@@ -289,7 +289,7 @@ void i7702::initialize()
             )
         );
     // max(A1, B, C) - D
-    ic_gsp_   += Max
+    ic_gsp_   <<= Max
         (Max
             ((Max(A1_, Max(Bgen_, Cgen_)) - Dgen_) * use_gen_
             ,(Max(A1_, Max(Bsep_, Csep_)) - Dsep_) * use_sep_
@@ -347,9 +347,9 @@ void i7702::initialize()
 
     if(!each_equal(Em_, 0.0))
         {
-        ig_usual_ += Max(ic_usual_, Em_);
-        ig_glp_   += Max(ic_glp_  , Em_);
-        ig_gsp_   += Max(ic_gsp_  , Em_);
+        ig_usual_ <<= Max(ic_usual_, Em_);
+        ig_glp_   <<= Max(ic_glp_  , Em_);
+        ig_gsp_   <<= Max(ic_gsp_  , Em_);
         }
 
     if(trace_)
diff --git a/i7702_init.cpp b/i7702_init.cpp
index 49438d7..fcabe4c 100644
--- a/i7702_init.cpp
+++ b/i7702_init.cpp
@@ -148,12 +148,12 @@ i7702::i7702
 
     database.query_into(DB_NaarDiscount, Em_);
     bool const no_naar_discount = zero == Em_;
-    std::vector<double> theoretical_naar_discount(length_);
-    theoretical_naar_discount +=
+    std::vector<double> theoretical_naar_discount {};
+    theoretical_naar_discount <<=
         apply_unary(i_upper_12_over_12_from_i<double>(), Bgen_);
 
-    std::vector<double> diff(length_);
-    diff += fabs(Em_ - theoretical_naar_discount);
+    std::vector<double> diff {};
+    diff <<= fabs(Em_ - theoretical_naar_discount);
     minmax<double> const mm(diff);
     constexpr double tolerance {0.0000001};
     LMI_ASSERT(no_naar_discount || mm < tolerance);
diff --git a/i7702_test.cpp b/i7702_test.cpp
index e5e6981..949e882 100644
--- a/i7702_test.cpp
+++ b/i7702_test.cpp
@@ -126,6 +126,10 @@ void i7702_test::test1()
     LMI_TEST(materially_equal(0.0032738                , z.ig_usual()[1]));
     std::cout<< std::setprecision(DECIMAL_DIG) << z.ig_usual()[0] << std::endl;
     std::cout<< std::setprecision(DECIMAL_DIG) << z.ig_usual()[1] << std::endl;
+
+    z.initialize();
+    LMI_TEST(materially_equal(0.00407412378364830143895, z.ig_usual()[0]));
+    LMI_TEST(materially_equal(0.0032738                , z.ig_usual()[1]));
 }
 
 int test_main(int, char*[])



reply via email to

[Prev in Thread] Current Thread [Next in Thread]