tt_RATE function

dynamic tt_RATE(
  1. dynamic v1,
  2. dynamic v2,
  3. dynamic v3
)

tt_RATE(nper, pmt, pv): interest rate per period (Newton-Raphson approximation)

Implementation

dynamic tt_RATE(dynamic v1, dynamic v2, dynamic v3) {
  final nper = varToInt(v1);
  final pmt = varToDouble(v2);
  final pv = varToDouble(v3);
  var rate = 0.1;
  for (var i = 0; i < 100; i++) {
    final f = pv * pow(1 + rate, nper) + pmt * (pow(1 + rate, nper) - 1) / rate;
    final df = pv * nper * pow(1 + rate, nper - 1) +
        pmt * (nper * rate * pow(1 + rate, nper - 1) * rate - (pow(1 + rate, nper) - 1)) /
        (rate * rate);
    if (df.abs() < 1e-12) break;
    rate -= f / df;
    if (f.abs() < 1e-8) break;
  }
  return rate;
}