lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master 4a022128 1/2: Use rate_times_currency() for r


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 4a022128 1/2: Use rate_times_currency() for rider charges
Date: Tue, 10 May 2022 04:12:55 -0400 (EDT)

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

    Use rate_times_currency() for rider charges
    
    Using rate_times_currency() is likely to be beneficial only when both
     - the rate is precise to eight digits or less, and
     - the amount by which it's multiplied is an integral number of dollars.
    Applied it in the last significant use case. Did not apply it in other
    cases, e.g.:
     - crediting and loan rates: these use monthly interest rates, which
         are precise to all available digits;
     - COI charges: NAAR involves a monthly discount factor;
     - sales-load refund: not significant--does not compound.
---
 ihs_avmly.cpp | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/ihs_avmly.cpp b/ihs_avmly.cpp
index d2005fd3..2ebc4b7a 100644
--- a/ihs_avmly.cpp
+++ b/ihs_avmly.cpp
@@ -1904,25 +1904,31 @@ void AccountValue::TxSetRiderDed()
     AdbCharge = C0;
     if(yare_input_.AccidentalDeathBenefit)
         {
-        AdbCharge = round_rider_charges().c
-            (YearsAdbRate * std::min(ActualSpecAmt, AdbLimit)
-            );
+        AdbCharge = rate_times_currency
+           (YearsAdbRate
+           ,std::min(ActualSpecAmt, AdbLimit)
+           ,round_rider_charges()
+           );
         }
 
     SpouseRiderCharge = C0;
     if(yare_input_.SpouseRider)
         {
-        SpouseRiderCharge = round_rider_charges().c
-            (YearsSpouseRiderRate * yare_input_.SpouseRiderAmount
-            );
+        SpouseRiderCharge = rate_times_currency
+           (YearsSpouseRiderRate
+           ,round_minutiae().c(yare_input_.SpouseRiderAmount)
+           ,round_rider_charges()
+           );
         }
 
     ChildRiderCharge = C0;
     if(yare_input_.ChildRider)
         {
-        ChildRiderCharge = round_rider_charges().c
-            (YearsChildRiderRate * yare_input_.ChildRiderAmount
-            );
+        ChildRiderCharge = rate_times_currency
+           (YearsChildRiderRate
+           ,round_minutiae().c(yare_input_.ChildRiderAmount)
+           ,round_rider_charges()
+           );
         }
 
     TermCharge    = C0;
@@ -1949,9 +1955,11 @@ void AccountValue::TxSetRiderDed()
             {
             case oe_waiver_times_specamt:
                 {
-                WpCharge = round_rider_charges().c
-                    (YearsWpRate * std::min(ActualSpecAmt, WpLimit)
-                    );
+                WpCharge = rate_times_currency
+                   (YearsWpRate
+                   ,std::min(ActualSpecAmt, WpLimit)
+                   ,round_rider_charges()
+                   );
                 DcvWpCharge = WpCharge;
                 }
                 break;



reply via email to

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