[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;