205 use,
intrinsic :: ieee_arithmetic, only: ieee_is_finite, ieee_is_nan
233 integer(kind=ik),
intent(in) :: n
234 real(kind=rk),
intent(in) :: pv, i
264 integer(kind=ik),
intent(in) :: n
265 real(kind=rk),
intent(in) :: g, a
294 integer(kind=ik),
intent(in) :: n, d, e
312 real(kind=rk),
intent(inout) :: n, i, pv, fv
313 integer(kind=ik),
intent(in) :: unknowns
314 integer(kind=ik),
intent(out) :: status
315 integer(kind=ik),
parameter :: allowed_vars = var_n + var_i + var_pv + var_fv
317 if (bitset_not_subsetp(unknowns, allowed_vars))
then
321 if (bitset_size(unknowns) > 1)
then
326 if (bitset_subsetp(var_pv, unknowns))
then
366 real(kind=rk),
intent(inout) :: n, i, pv, fv, a
367 integer(kind=ik),
intent(in) :: d, unknowns
368 integer(kind=ik),
intent(out) :: status
369 integer(kind=ik),
parameter :: allowed_vars = var_n + var_i + var_pv + var_fv + var_a
370 integer :: num_unknowns
372 num_unknowns = bitset_size(unknowns)
373 if (num_unknowns > 2)
then
375 else if (bitset_not_subsetp(unknowns, allowed_vars))
then
378 if (num_unknowns > 0)
then
379 if (bitset_subsetp(var_a, unknowns))
then
380 if (bitset_subsetp(var_i, unknowns))
then
381 i = f2p((pv / fv) ** (-1 / n) - 1)
384 if (bitset_subsetp(var_pv, unknowns))
then
385 pv = fv / (1 + iq) ** n
386 else if (bitset_subsetp(var_fv, unknowns))
then
387 fv = pv * (1 + iq) ** n
388 else if (bitset_subsetp(var_n, unknowns))
then
389 n = -log(pv / fv) / log(1 + iq)
391 a = fv * (1 + iq) ** (d - n)
392 else if (bitset_subsetp(var_n, unknowns))
then
393 if (bitset_subsetp(var_i, unknowns))
then
394 if (abs(d) < zero_epsilon)
then
398 i = f2p((pv / a) ** (-1.0_rk / d) - 1)
401 if (bitset_subsetp(var_pv, unknowns))
then
402 pv = a * (1 + iq) ** (-d)
403 else if (bitset_subsetp(var_fv, unknowns))
then
407 n = (d * log(1 + iq) + log(fv / a)) / log(1 + iq)
408 else if (bitset_subsetp(var_i, unknowns))
then
409 if (bitset_subsetp(var_pv, unknowns))
then
410 if (abs(d-n) < zero_epsilon)
then
414 pv = a * ((fv / a) ** (-1 / (d - n))) ** (-d)
416 else if (bitset_subsetp(var_fv, unknowns))
then
417 if (abs(d) < zero_epsilon)
then
421 if (abs(d-n) < zero_epsilon)
then
424 fv = (pv / a) ** ((d - n) / d) * a
428 if (abs(d-n) < zero_epsilon)
then
429 i = f2p(exp(-log(pv / a) / n) - 1)
431 i = f2p(exp(-log(fv / a) / (d - n)) - 1)
435 if (bitset_subsetp(var_fv, unknowns))
then
436 fv = a * (1 + iq) ** (-d + n)
438 if (bitset_subsetp(var_pv, unknowns))
then
439 pv = a * (1 + iq) ** (-d)
461 real(kind=rk),
intent(in) :: n, i, pv, fv, a
462 integer(kind=ik),
intent(in) :: d
463 integer(kind=ik),
intent(out) :: status
467 else if (.not. ieee_is_finite(n))
then
469 else if (ieee_is_nan(n))
then
471 else if (d > nint(n, ik))
then
473 else if (n < zero_epsilon)
then
477 else if (.not. ieee_is_finite(i))
then
479 else if (ieee_is_nan(i))
then
481 else if (abs(i) < zero_epsilon)
then
483 else if (abs(100+i) < zero_epsilon)
then
485 else if (.not. ieee_is_finite(pv))
then
487 else if (ieee_is_nan(pv))
then
489 else if (.not. ieee_is_finite(fv))
then
491 else if (ieee_is_nan(fv))
then
493 else if (.not. ieee_is_finite(a))
then
495 else if (ieee_is_nan(a))
then
562 real(kind=rk),
intent(inout) :: n, i, pv, fv, a
563 integer(kind=ik),
intent(in) :: d, e
564 integer(kind=ik),
intent(in) :: unknowns
565 integer(kind=ik),
intent(out) :: status
566 integer(kind=ik),
parameter :: allowed_vars = var_n + var_i + var_pv + var_fv + var_a
567 integer :: num_unknowns
568 real(kind=rk) :: islvivl0(3), islvivl1(3), iq
569 num_unknowns = bitset_size(unknowns)
570 if (num_unknowns > 2)
then
572 else if (bitset_not_subsetp(unknowns, allowed_vars))
then
575 if (num_unknowns > 0)
then
576 islvivl0 = [ 0.0_rk+zero_epsilon, -100.0_rk+zero_epsilon, -99999.0_rk]
577 islvivl1 = [ 99999.0_rk, 0.0_rk-zero_epsilon, -100.0_rk-zero_epsilon]
578 if (bitset_subsetp(var_a, unknowns))
then
579 if (bitset_subsetp(var_i, unknowns))
then
580 i = f2p((fv / pv) ** (1 / n) - 1)
583 if (bitset_subsetp(var_pv, unknowns))
then
584 pv = (1 + iq) ** (-n) * fv
585 else if (bitset_subsetp(var_fv, unknowns))
then
586 fv = pv * (1 + iq) ** n
587 else if (bitset_subsetp(var_n, unknowns))
then
588 n = -log(pv / fv) / log(1 + iq)
590 a = -fv * iq / ((1 + iq) ** e - (1 + iq) ** (1 + n - d))
591 else if (bitset_subsetp(var_n, unknowns))
then
592 if (bitset_subsetp(var_i, unknowns))
then
593 if ((d==0) .and. (e==0))
then
594 i = f2p(-(fv - pv) * a / (a - pv) / fv)
595 else if ((d==0) .and. (e==1))
then
596 i = f2p(-(fv - pv) * a / (a * fv - a * pv - fv * pv))
597 else if ((d==1) .and. (e==0))
then
598 i = f2p(a * (fv - pv) / fv / pv)
599 else if ((d==1) .and. (e==1))
then
600 i = f2p((fv - pv) * a / pv / (a + fv))
602 call multi_bisection(i, islvivl0, islvivl1,
sf_i_no_n, 1.0e-5_rk, 1.0e-5_rk, 1000_ik, status, .false.)
603 if (status /= 0)
then
610 if (bitset_subsetp(var_pv, unknowns))
then
611 pv = (1 + iq) ** (1 - d) * a * fv / (a * (1 + iq) ** e + fv * iq)
612 else if (bitset_subsetp(var_fv, unknowns))
then
613 fv = (1 + iq) ** e * a * pv / ((1 + iq) ** (1.0_rk - d) * a - iq * pv)
615 n = (log(1 + iq) * d - log(1 + iq) + log((a * exp(log(1 + iq) * e) + fv * iq) / a)) / log(1 + iq)
617 if (bitset_subsetp(var_i, unknowns))
then
618 if (bitset_subsetp(var_fv, unknowns))
then
619 call multi_bisection(i, islvivl0, islvivl1,
sf_i_no_fv, 1.0e-7_rk, 1.0e-7_rk, 1000_ik, status, .false.)
620 if (status /= 0)
then
624 else if (bitset_subsetp(var_pv, unknowns))
then
625 call multi_bisection(i, islvivl0, islvivl1,
sf_i_no_pv, 1.0e-7_rk, 1.0e-7_rk, 1000_ik, status, .false.)
626 if (status /= 0)
then
631 i = f2p((fv / pv) ** (1 / n) - 1)
635 if (bitset_subsetp(var_fv, unknowns))
then
636 fv = 1 / iq * (-(1 + iq) ** e + (1 + iq) ** (1 + n - d)) * a
638 if (bitset_subsetp(var_pv, unknowns))
then
639 pv = (-(1 / (1 + iq)) ** (n - e + 1) * (1 + iq) / iq + (1 / (1 + iq)) ** d * (1 + iq) / iq) * a
648 real(kind=rk),
intent(in) :: i
651 sf_i_no_n = (a * (1 + iq) ** e + fv * iq) * pv - (1 + iq) ** (1 - d) * a * fv
655 real(kind=rk),
intent(in) :: i
658 sf_i_no_fv = (-(1 / (1 + iq)) ** (n - e + 1) * (1 + iq) / iq + (1 / (1 + iq)) ** d * (1 + iq) / iq) * a - pv
662 real(kind=rk),
intent(in) :: i
665 sf_i_no_pv = 1 / iq * (-(1 + iq) ** e + (1 + iq) ** (1 + n - d)) * a - fv
681 real(kind=rk),
intent(in) :: n, i, pv, fv, a
682 integer(kind=ik),
intent(in) :: d, e
683 integer(kind=ik),
intent(out) :: status
689 else if (.not. ieee_is_finite(n))
then
691 else if (ieee_is_nan(n))
then
693 else if (d > nint(n, ik))
then
695 else if (e > nint(n, ik))
then
697 else if ((d+e) > nint(n, ik))
then
699 else if (n < zero_epsilon)
then
703 else if (.not. ieee_is_finite(i))
then
705 else if (ieee_is_nan(i))
then
707 else if (abs(i) < zero_epsilon)
then
709 else if (abs(100+i) < zero_epsilon)
then
711 else if (.not. ieee_is_finite(pv))
then
713 else if (ieee_is_nan(pv))
then
715 else if (.not. ieee_is_finite(fv))
then
717 else if (ieee_is_nan(fv))
then
719 else if (.not. ieee_is_finite(a))
then
721 else if (ieee_is_nan(a))
then
725 if (abs(1 / iq * (-(1 + iq) ** e + (1 + iq) ** (1 + n - d)) * a - fv) >
consistent_epsilon)
then
727 else if (abs((-(1 / (1 + iq)) ** (n - e + 1) * (1 + iq) / iq + (1 / (1 + iq)) ** d * (1 + iq) / iq) * a - pv) >
consistent_epsilon)
then
781 real(kind=rk),
intent(inout) :: n, i, g, pv, fv, a
782 integer(kind=ik),
intent(in) :: d, e
783 integer(kind=ik),
intent(in) :: unknowns
784 integer(kind=ik),
intent(out) :: status
785 integer(kind=ik),
parameter :: allowed_vars = var_n + var_pv + var_fv + var_a
786 integer :: num_unknowns
787 real(kind=rk) :: iq, gq, iq1, gq1, giq
788 num_unknowns = bitset_size(unknowns)
789 if (num_unknowns > 2)
then
791 else if (bitset_not_subsetp(unknowns, allowed_vars))
then
799 if (num_unknowns > 0)
then
800 if (abs(i-g) < zero_epsilon)
then
801 if (bitset_subsetp(var_a, unknowns))
then
802 if (bitset_subsetp(var_pv, unknowns))
then
803 pv = fv * iq1 ** (-n)
804 else if (bitset_subsetp(var_fv, unknowns))
then
806 else if (bitset_subsetp(var_n, unknowns))
then
809 a = -fv * iq1 ** (d - n) / (d - n + e - 1)
810 else if (bitset_subsetp(var_n, unknowns))
then
811 if (bitset_subsetp(var_fv, unknowns))
then
812 fv = pv * iq1 ** ((iq1 ** d * pv + a * (-1 + d + e)) / a)
815 else if (num_unknowns > 1)
then
818 n = ((iq1) ** (-d) * a * d + iq1 ** (-d) * a * e - a * iq1 ** (-d) + pv) / iq1 ** (-d) / a
820 if (bitset_subsetp(var_fv, unknowns))
then
821 fv = a * iq1 ** (-d + n) * (-d + n - e + 1)
823 if (bitset_subsetp(var_pv, unknowns))
then
824 pv = (-d + n - e + 1) * iq1 ** (-d) * a
828 if (bitset_subsetp(var_a, unknowns))
then
829 if (bitset_subsetp(var_pv, unknowns))
then
830 pv = fv * iq1 ** d * gq1 ** e * (-(gq1) ** (n - e + 1) * iq1 ** (-n + e) + iq1 ** (1 - d) * gq1 ** d) / (iq1 ** n * iq1 * gq1 ** (d + e) - gq1 ** n * iq1 ** (d + e) * gq1)
831 else if (bitset_subsetp(var_fv, unknowns))
then
832 fv = (-(gq1) ** n * gq1 * iq1 ** (d + e + n) + gq1 ** (d + e) * iq1 ** (2 * n) * iq1) * pv / (iq1 ** n * iq1 * gq1 ** (d + e) - gq1 ** n * iq1 ** (d + e) * gq1)
833 else if (bitset_subsetp(var_n, unknowns))
then
836 a = fv * giq / (gq1 ** (-d + n - e + 1) * iq1 ** e - iq1 ** (1 + n - d))
837 else if (bitset_subsetp(var_n, unknowns))
then
838 if (bitset_subsetp(var_fv, unknowns))
then
839 fv = 1 / giq * (gq1 ** (1 / (log(gq1) - log(iq1)) * (d * log(iq1) + log((a * iq1 * iq1 ** (-d) + giq * pv) / a) - log(iq1))) * iq1 ** e - iq1 ** ((log((a * iq1 * iq1 ** (-d) + giq * pv) / a) + (d - e - 1) * log(iq1) + e * log(gq1)) / (log(gq1) - log(iq1)))) * a
840 else if (num_unknowns > 1)
then
843 n = ((log(gq1) - log(iq1)) * e + (d - 1) * log(gq1) + log(1 / a * (a * iq * iq1 ** (-d) + a * iq1 ** (-d) + pv * gq - pv * iq))) / (log(gq1) - log(iq1))
845 if (bitset_subsetp(var_fv, unknowns))
then
846 fv = 1 / giq * (gq1 ** (-d + n - e + 1) * iq1 ** e - iq1 ** (1 + n - d)) * a
848 if (bitset_subsetp(var_pv, unknowns))
then
849 pv = (gq1 * (gq1 / iq1) ** (n - e) - (gq1 / iq1) ** d * iq1) * gq1 ** (-d) * a / giq
872 real(kind=rk),
intent(in) :: n, i, g, pv, fv, a
873 integer(kind=ik),
intent(in) :: d, e
874 integer(kind=ik),
intent(out) :: status
875 real(kind=rk) :: iq, gq
880 else if (.not. ieee_is_finite(n))
then
882 else if (ieee_is_nan(n))
then
884 else if (d > nint(n, ik))
then
886 else if (e > nint(n, ik))
then
888 else if ((d+e) > nint(n, ik))
then
890 else if (n < zero_epsilon)
then
894 else if (.not. ieee_is_finite(i))
then
896 else if (ieee_is_nan(i))
then
898 else if (abs(i) < zero_epsilon)
then
900 else if (abs(100+i) < zero_epsilon)
then
902 else if (.not. ieee_is_finite(g))
then
904 else if (ieee_is_nan(g))
then
906 else if (abs(g) < zero_epsilon)
then
908 else if (abs(100+g) < zero_epsilon)
then
910 else if (.not. ieee_is_finite(pv))
then
912 else if (.not. ieee_is_finite(fv))
then
914 else if (ieee_is_nan(pv))
then
916 else if (ieee_is_nan(fv))
then
918 else if (.not. ieee_is_finite(a))
then
920 else if (ieee_is_nan(a))
then
925 if (abs(i-g) < zero_epsilon)
then
926 if (abs(a * (1 + iq) ** (-dble(d) + dble(n)) * (-d + n - e + 1) - fv) >
consistent_epsilon)
then
934 if (abs(1 / (gq - iq) * ((1 + gq) ** (-d + n - e + 1) * (1 + iq) ** e - (1 + iq) ** (1 + n - d)) * a - fv) >
consistent_epsilon)
then
936 else if (abs(((1 + gq) * ((1 + gq) / (1 + iq)) ** (n - e) - ((1 + gq) / (1 + iq)) ** d * (1 + iq)) * (1 + gq) ** (-d) * a / (gq - iq) - pv) >
consistent_epsilon)
then
988 real(kind=rk),
intent(inout) :: n, i, q, pv, fv, a
989 integer(kind=ik),
intent(in) :: d, e
990 integer(kind=ik),
intent(in) :: unknowns
991 integer(kind=ik),
intent(out) :: status
992 integer(kind=ik) :: cur_unk, lst_unk
993 real(kind=rk) :: iq, iq1, epd, n1
1001 if (bitset_subsetp(var_i, cur_unk) .and. bitset_not_intersectp(cur_unk, var_fv+var_pv+var_n))
then
1002 iq = (fv / pv) ** (1 / n) - 1
1005 cur_unk = bitset_minus(cur_unk, var_i)
1007 if (bitset_subsetp(var_n, cur_unk) .and. bitset_not_intersectp(cur_unk, var_fv+var_pv+var_i))
then
1008 n = log(fv / pv) / log(iq1)
1010 cur_unk = bitset_minus(cur_unk, var_n)
1012 if (bitset_subsetp(var_pv, cur_unk) .and. bitset_not_intersectp(cur_unk, var_fv+var_i+var_n))
then
1014 cur_unk = bitset_minus(cur_unk, var_pv)
1016 if (bitset_subsetp(var_fv, cur_unk) .and. bitset_not_intersectp(cur_unk, var_pv+var_i+var_n))
then
1018 cur_unk = bitset_minus(cur_unk, var_fv)
1020 if (bitset_subsetp(var_a, cur_unk) .and. bitset_not_intersectp(cur_unk, var_i+var_n+var_q+var_fv))
then
1021 a = iq1 ** d * (iq1 ** (n1 - d) * q + q * (-1 + (epd - n1) * iq) * iq1 ** e - fv * iq ** 2) / iq / (iq1 ** epd - iq1 ** (n1))
1022 cur_unk = bitset_minus(cur_unk, var_a)
1024 if (bitset_subsetp(var_q, cur_unk) .and. bitset_not_intersectp(cur_unk, var_i+var_a+var_pv+var_n))
then
1025 q = iq * (a * iq1 ** epd + pv * iq * iq1 ** (d + n) - a * iq1 ** n * iq1) / ((-1 + (epd - n1) * iq) * iq1 ** epd + iq1 ** (n1))
1026 cur_unk = bitset_minus(cur_unk, var_q)
1028 if (bitset_subsetp(var_pv, cur_unk) .and. bitset_not_intersectp(cur_unk, var_n+var_q+var_a+var_i))
then
1029 pv = ((((epd - n1) * q - a) * iq - q) * (1 / iq1) ** (n - e) + (a * iq + q) * iq1 * (1 / iq1) ** d) / iq ** 2
1030 cur_unk = bitset_minus(cur_unk, var_pv)
1032 if (bitset_subsetp(var_fv, cur_unk) .and. bitset_not_intersectp(cur_unk, var_n+var_q+var_a+var_i))
then
1033 fv = (iq1 ** (n1 - d) * (a * iq + q) - iq1 ** e * (((n1 - e - d) * q + a) * iq + q)) / iq ** 2
1034 cur_unk = bitset_minus(cur_unk, var_fv)
1036 if (cur_unk == lst_unk)
then
1041 if (bitset_size(cur_unk) > 0)
then
1062 real(kind=rk),
intent(in) :: n, i, q, pv, fv, a
1063 integer(kind=ik),
intent(in) :: d, e
1064 integer(kind=ik),
intent(out) :: status
1068 else if (e < 0)
then
1070 else if (.not. ieee_is_finite(n))
then
1072 else if (ieee_is_nan(n))
then
1074 else if (d > nint(n, ik))
then
1076 else if (e > nint(n, ik))
then
1078 else if ((d+e) > nint(n, ik))
then
1080 else if (n < zero_epsilon)
then
1082 else if (n < 1)
then
1084 else if (.not. ieee_is_finite(i))
then
1086 else if (ieee_is_nan(i))
then
1088 else if (abs(i) < zero_epsilon)
then
1090 else if (abs(100+i) < zero_epsilon)
then
1092 else if (.not. ieee_is_finite(q))
then
1094 else if (ieee_is_nan(q))
then
1096 else if (abs(q) < zero_epsilon)
then
1098 else if (.not. ieee_is_finite(pv))
then
1100 else if (.not. ieee_is_finite(fv))
then
1102 else if (ieee_is_nan(pv))
then
1104 else if (ieee_is_nan(fv))
then
1106 else if (.not. ieee_is_finite(a))
then
1108 else if (ieee_is_nan(a))
then
1112 if (abs(((1 + iq) ** (1 + n - d) * (a * iq + q) - (1 + iq) ** e * (((1 + n - e - d) * q + a) * iq + q)) / iq ** 2 - fv) >
consistent_epsilon)
then
1114 else if (abs(((((d - 1 - n + e) * q - a) * iq - q) * (1 / (1 + iq)) ** (n - e) + (a * iq + q) * (1 + iq) * (1 / (1 + iq)) ** d) / iq ** 2 - pv) >
consistent_epsilon)
then
real(kind=rk) function sf_i_no_pv(i)
real(kind=rk) function sf_i_no_n(i)
real(kind=rk) function sf_i_no_fv(i)
Simple sets (using the bits of an integer to indicate element existence).
integer(kind=ik) pure function, public bitset_size(bitset)
Return the number of elements in bitset.
logical pure function, public bitset_not_intersectp(bitset1, bitset2)
integer(kind=ik) pure function, public bitset_minus(bitset1, bitset2)
Return the set diffrence between bitset1 and bitset2.
logical pure function, public bitset_not_subsetp(bitset1, bitset2)
logical pure function, public bitset_subsetp(bitset1, bitset2)
Configuration for MRFFL (MR Fortran Finance Library).
integer, parameter, public mrfflrk
Real kind used in interfaces.
real(kind=mrfflrk), parameter, public zero_epsilon
Used to test for zero.
integer, parameter, public mrfflik
Integer kinds used in interfaces.
Simple functions for working with percentages.
elemental real(kind=rk) function, public percentage_to_fraction(p)
Convert a percentage to a fraction.
elemental real(kind=rk) function, public fraction_to_percentage(f)
Convert a fraction to a percentage.
subroutine, public multi_bisection(xc, x0_init, x1_init, f, x_epsilon, y_epsilon, max_itr, status, progress)
Use bisection() to search for a root for the function f in a list of intervals returning the first ro...
Solvers for TVM problems involving lump sums, level (fixed) annuities, and geometric (growing) annuit...
real(kind=rk) pure function, public tvm_geometric_annuity_sum_a(n, g, a)
Sum the payments from a geometric annuity.
subroutine, public tvm_delayed_geometric_annuity_solve(n, i, g, pv, fv, a, d, e, unknowns, status)
Solve for TVM parameters for a geometric annuity certain.
subroutine, public tvm_delayed_arithmetic_annuity_check(n, i, q, pv, fv, a, d, e, status)
Check TVM parameters for a arithmatic annuity certain.
subroutine, public tvm_lump_sum_solve(n, i, pv, fv, unknowns, status)
Solve for TVM parameters for a lump sum.
integer(kind=ik) pure function, public tvm_delayed_annuity_num_payments(n, d, e)
Return the number of payments given the period count (n), delay (d), and early end (e).
subroutine, public tvm_delayed_arithmetic_annuity_solve(n, i, q, pv, fv, a, d, e, unknowns, status)
Solve for TVM parameters for a arithmetic annuity certain.
subroutine, public tvm_delayed_lump_sum_solve(n, i, pv, fv, a, d, unknowns, status)
Solve for TVM parameters for a generalized lump sum.
real(kind=rk), parameter consistent_epsilon
Used to check equation consistency.
subroutine, public tvm_delayed_lump_sum_check(n, i, pv, fv, a, d, status)
Check the TVM parameters for a generalized lump sum.
real(kind=rk) pure elemental function, public fv_from_pv_n_i(pv, n, i)
compute future value from present value (pv), number of periods (n), and an intrest rate (i).
subroutine, public tvm_delayed_level_annuity_check(n, i, pv, fv, a, d, e, status)
Check TVM parameters for a level annuity.
subroutine, public tvm_delayed_level_annuity_solve(n, i, pv, fv, a, d, e, unknowns, status)
Solve for TVM parameters for a level annuity.
subroutine, public tvm_delayed_geometric_annuity_check(n, i, g, pv, fv, a, d, e, status)
Check TVM parameters for a geometric annuity certain.
Constants to to identify TVM variables.
integer(kind=ik), parameter, public var_pv
Present value.
integer(kind=ik), parameter, public var_fv
Future value.
integer(kind=ik), parameter, public var_n
Number of periods.
integer(kind=ik), parameter, public var_a
First annuity payment.
integer(kind=ik), parameter, public var_none
No variables in set.
integer(kind=ik), parameter, public var_i
Interest/rate (First rate for geometric annuity)
integer(kind=ik), parameter, public var_q
Growth rate for arithmatic annuities.
integer(kind=ik), parameter, public var_g
Second Interest/rate (for geometric annuity)
integer(kind=ik), parameter, public var_p
Principal.