lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] valyuta/002 215244a 13/21: Avoid implicit mixed-mode


From: Greg Chicares
Subject: [lmi-commits] [lmi] valyuta/002 215244a 13/21: Avoid implicit mixed-mode calculations more avidly
Date: Fri, 18 Sep 2020 21:53:48 -0400 (EDT)

branch: valyuta/002
commit 215244ac5c85021655cabba66e3bb1967671a20e
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Avoid implicit mixed-mode calculations more avidly
    
    Explicit is better than implicit. And it makes mistakes like this easier
    to identify and remove [YearsTotalGptForceout is of currency type]:
    
    -        ,currency() - YearsTotalGptForceout.d()
    +        ,currency() - YearsTotalGptForceout
---
 accountvalue.cpp |  2 +-
 currency.hpp     |  7 +------
 ihs_acctval.cpp  |  2 +-
 ihs_avmly.cpp    | 35 ++++++++++++++++++-----------------
 ihs_basicval.cpp |  2 +-
 5 files changed, 22 insertions(+), 26 deletions(-)

diff --git a/accountvalue.cpp b/accountvalue.cpp
index 9c6c86c..5723536 100644
--- a/accountvalue.cpp
+++ b/accountvalue.cpp
@@ -790,7 +790,7 @@ void AccountValue::TxSetCoiCharge()
     TxSetDeathBft();
 
     // Negative AV doesn't increase NAAR.
-    NAAR = (deathbft * mlyguarv - (AVUnloaned + AVRegLn + AVPrfLn)).d();
+    NAAR = deathbft * mlyguarv - (AVUnloaned + AVRegLn + AVPrfLn).d();
     NAAR = round_naar()(NAAR);
 
     CoiCharge = round_coi_charge().c(NAAR * YearsCoiRate0);
diff --git a/currency.hpp b/currency.hpp
index 75836cc..55ba053 100644
--- a/currency.hpp
+++ b/currency.hpp
@@ -150,12 +150,7 @@ inline bool operator>=(currency const& lhs, currency 
const& rhs){return !operato
 
 inline currency operator+(currency lhs, currency rhs) {return lhs += rhs;}
 inline currency operator-(currency lhs, currency rhs) {return lhs -= rhs;}
-inline currency operator+(currency lhs, double rhs) {return lhs += 
currency(rhs);}
-inline currency operator+(double lhs, currency rhs) {return currency(lhs) += 
rhs;}
-inline currency operator-(currency lhs, double rhs) {return lhs -= 
currency(rhs);}
-inline currency operator-(double lhs, currency rhs) {return currency(lhs) -= 
rhs;}
-//inline currency operator*(currency lhs, double rhs) {return lhs *= 
currency(rhs);}
-////inline double operator*(currency lhs, double rhs) {return lhs *= 
currency(rhs);}
+
 // Don't actually want any member operator*() for double:
 inline double operator*(currency lhs, double rhs) {return lhs.d() *  rhs;}
 inline double operator*(double lhs, currency rhs) {return lhs *  rhs.d();}
diff --git a/ihs_acctval.cpp b/ihs_acctval.cpp
index 8029e6d..2534c73 100644
--- a/ihs_acctval.cpp
+++ b/ihs_acctval.cpp
@@ -1317,7 +1317,7 @@ void AccountValue::FinalizeYear()
     VariantValues().NetPmt[Year] = std::accumulate
         (NetPmts.begin()
         ,NetPmts.end()
-        ,currency() - YearsTotalGptForceout.d() // unary operator-()
+        ,currency() - YearsTotalGptForceout // unary operator-()
         ).d();
 
     if(mce_run_gen_curr_sep_full == RunBasis_)
diff --git a/ihs_avmly.cpp b/ihs_avmly.cpp
index 461c842..2e606d4 100644
--- a/ihs_avmly.cpp
+++ b/ihs_avmly.cpp
@@ -1744,8 +1744,8 @@ void AccountValue::TxSetDeathBft()
         ,   (
                 YearsCorridorFactor
             *   (   Dcv
-                -   std::min(currency(), SurrChg())
-                +   GetRefundableSalesLoad()
+                -   std::min(currency(), SurrChg()).d()
+                +   GetRefundableSalesLoad().d()
 //                +   std::max(0.0, ExpRatReserve) // This would be added if 
it existed.
                 )
             )
@@ -1875,11 +1875,11 @@ void AccountValue::TxSetCoiCharge()
                 )
             );
         double retention_rate = round_coi_rate()(coi_rate * CoiRetentionRate);
-        retention_charge = round_coi_charge()(NAAR * retention_rate);
+        retention_charge = NAAR * retention_rate;
         }
 
     CoiCharge    = round_coi_charge().c(NAAR * ActualCoiRate);
-    NetCoiCharge = CoiCharge - retention_charge;
+    NetCoiCharge = CoiCharge - round_coi_charge().c(retention_charge);
     YearsTotalCoiCharge += CoiCharge;
 
     // DCV need not be rounded.
@@ -1963,11 +1963,11 @@ void AccountValue::TxSetRiderDed()
                     YearsWpRate
                     *   (
                             DcvCoiCharge
-                        +   MonthsPolicyFees
-                        +   SpecAmtLoad
-                        +   AdbCharge
-                        +   SpouseRiderCharge
-                        +   ChildRiderCharge
+                        +   MonthsPolicyFees.d()
+                        +   SpecAmtLoad.d()
+                        +   AdbCharge.d()
+                        +   SpouseRiderCharge.d()
+                        +   ChildRiderCharge.d()
                         +   DcvTermCharge
                         );
                 }
@@ -2379,19 +2379,20 @@ currency AccountValue::anticipated_deduction
 
 void AccountValue::SetMaxWD()
 {
-    MaxWD =
+    double max_wd =
           AVGenAcct * MaxWdGenAcctValMult
         + AVSepAcct * MaxWdSepAcctValMult
-        + (AVRegLn  + AVPrfLn)
-        - (RegLnBal + PrfLnBal)
-        - anticipated_deduction(MaxWDDed_)
-        - std::max(currency(), SurrChg())
+        + (AVRegLn  + AVPrfLn).d()
+        - (RegLnBal + PrfLnBal).d()
+        - anticipated_deduction(MaxWDDed_).d()
+        - std::max(0.0, SurrChg().d())
         ;
-    if(MaxWD < MinWD)
+    if(max_wd < MinWD.d())
         {
-        MaxWD = currency();
+        max_wd = 0.0;
         }
-    MaxWD = std::max(currency(), MaxWD);
+    max_wd = std::max(0.0, max_wd);
+    MaxWD = round_withdrawal().c(max_wd);
 }
 
 /// Take a withdrawal.
diff --git a/ihs_basicval.cpp b/ihs_basicval.cpp
index 71c9623..8bb7f42 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -1494,7 +1494,7 @@ currency BasicValues::GetModalSpecAmtTgt(currency 
annualized_pmt) const
         case oe_modal_table:
             return round_min_specamt().c
                 (
-                    (annualized_pmt - TgtPremMonthlyPolFee * 12.0)
+                    (annualized_pmt - TgtPremMonthlyPolFee * 12)
                 /   MortalityRates_->TargetPremiumRates()[0]
                 );
         }



reply via email to

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