Рекурсивно вычислить проще всего: 1,0 + RoR:
double calculateRateOfReturnPlus1(double rate, int periods) {
if (periods == 0)
return 1.0;
return (1.0 + rate) * calculateRateOfReturnPlus1(rate, periods - 1);
}
Возвращает 1,21 для коэффициента = 0,1, периодов = 2 и 1,313 для коэффициента = 0,1, периодов = 3.Затем вы можете вычесть 1,0, чтобы получить чистый RoR.Кроме того, вы можете вычислить RoR непосредственно следующим образом:
double calculateRateOfReturn(double rate, int periods) {
if (periods == 0)
return 0.0;
return (1.0 + rate) * (calculateRateOfReturn(rate, periods - 1) + 1.0) - 1.0;
}
Кроме того, вы можете вычислить RoR итеративно следующим образом:
double calculateRateOfReturn(double rate, int periods) {
double RoR = 1.0;
for (int i = 0; i < periods; i++) {
RoR = RoR * (1.0 + rate);
}
return RoR - 1.0;
}
Последние две функции возвращают 0,21 для скорости = 0,1, периодов= 2 и 0,331 для ставки = 0,1, периоды = 3.
На практике можно просто полагаться на функцию Math.Pow()
:
double calculateRateOfReturn(double rate, int periods) {
return Math.Pow(1.0+rate, periods) - 1.0;
}