Главная arrow С++ (часть 2) arrow Расчет суммы вложения, обеспечивающей заданный аннуитет

Расчет суммы вложения, обеспечивающей заданный аннуитет

Другой распространенный расчет — определение суммы, которую нужно вложить, чтобы выплачивался заданный с учетом регулярных расходов аннуитет. Например, вы можете решить, что при выходе на пенсию вам нужно 5000 долларов ежемесячно в течение 20 лет. Вопрос состоит в том, сколько вам нужно вложить, чтобы гарантировать необходимые регулярные выплаты-Поможет найти ответ следующая формула.
Initial Investment = ((regWD * wdPerYear) / rateOfRet *
*(!-(!/ (rateOfRet / WdPerYear) + O^PerYear* numYears)), где rateOfRet содержит процентную ставку, regWD — планируемая сумма регулярных расходов, wdPerYear — число расходуемых сумм (regWD) в год и numYears — продолжительность регулярных выплат (the length of annuity) в годах.
g программе, приведенной в листинге 6.4, функция annuity () вычисляет размер первоначальной инвестиции, требуемый для получения необходимого аннуитета. Ей передаются величина регулярных расходов, процентная ставка, необходимая продолжительность выплат и количество начислений процентов в год. Функция возвращает минимальный размер вложения, достаточный для получения регулярно выплачиваемого аннуитета заданной величины.
^Листинг 6.4. Расчет размера начальной инвестиции для получения заданного МйУитета
------------------'¦-----------------------1---------------------
finclude <iostream> finclude <cmath> finclude <iomanip> finclude <locale>
using namespace std;
// Вычисляет размер первоначальной инвестиции, необходимой для // получения заданных регулярных выплат. Другими словами, находит // начальную сумму, обеспечивающую заданные регулярные // расходы в течение определенного периода времени, double annuity(double regWD, double rateOfRet, int numYears, int numPerYear)  {
double b, e; double tl, t2;
rateOfRet /= 100.0; // преобразует проценты в дробь
tl = (regWD * numPerYear) / raceOfRet;
b = (1 + rateOfRet/numPerYear); e = numPerYear * numYears;
t2 = l - (l / pow(b, e));
return tl * t2;
}
int mainO  { double wd, r; int y, wpy;
// Присваивает locale значение english.
// Откорректируйте, если необходимо, язык/регион.
cout.imbue(locale("english"));
cout « "Enter desired withdrawal: ."; cin » wd;
cout « "Enter rate of return (as a percentage): "; cin » r;
cout « "Enter number years:  "; cin » y;
cout « "Enter number of withdrawals per year: "; cin » wpy;
cout « "\nlnitial investment required: " « fixed « setprecision(2) « annuity (wd, r, y, wpy) « endl;
return 0;
}
Далее приведен пример вывода программы.
Enter desired withdrawal: 5000
Enter rate of return (as a percentage): 6
Enter number of years: 20
Enter number of withdrawals per year: 12
Initial investment required: 697,903.86
расчет максимального размера аннуитета для заданной суммы вложения
?ще один расчет аннуитета позволяет найти максимально возможный размер выплат (на покрытие регулярных расходов) в течение определенного периода при заданном размере вложения. Например, если у вас есть 500 ООО долларов на пенсионном счете, сколько вы можете брать ежемесячно в течение 20 лет с учетом процентной ставки 6%? Приведенная далее формула вычисляет максимально допустимую величину регулярных расходов.
Maximum Withdrawal = principal * (((rateOfRet / wdPerYear)/
/(-1 + ((rateOfRet / WdPerYear) + l)vd*rYear* numYcars))+
+(rateOfRet * wdPerYear)),
ще rateOfRet задает процентную ставку, principal содержит величину начального вложения, wdPerYear определяет число выплат в год, numYears — продолжительность получения аннуитета в годах.
функция maxwdo, приведенная в листинге 6.5, вычисляет максимальный размер регулярных расходов в течение указанного периода времени при заданной процентной ставке. Ей передаются величина инвестиции, процентная ставка, продолжительность получения аннуитета в годах и количество . начислений процентов в год. Функция возвращает величину максимально возможного аннуитета.