P/Y C/Y - Рассчитать будущую стоимость (FV) из платежей (PMT) с начисленным периодом в год (C/Y)
Я делаю проект TVM и не совсем понимаю, как сложный интерес переводится в код. В качестве справки я использую финансовый калькулятор BA II Plus.
Пример: Найти будущую стоимость выплат в размере 100 долларов США, которые будут производиться в начале каждого месяца в течение 10 лет, если проценты начисляются на 5% ежеквартально.
В финансовом калькуляторе:
N: 120 (10 х 12 м)
I / Y: 5% (годовая процентная ставка)
P / Y: 12 (12 раз в год)
C / Y: 4 (4 раза в год)
PV: 0
PMT: 100
BGN: TRUE
FV: [CPT] [FV] => -15575.41334
Вот метод будущей стоимости.
static public double fv(double r, int n, double pmt, double pv, int bgn) {
return -(pv * Math.pow(1 + r, n) + pmt * (1 + r * bgn) * (Math.pow(1 + r, n) - 1) / r);
}
Вызовите метод, используя номера из примера
// rate n pmt pv bgn
double fv = fv(0.05/12, 120, 100, 0, 1); // -15592.928894335751 which is wrong
1 ответ
Кажется, вы получаете числовые ошибки в вычислениях.
Вычисления с плавающей точкой по своей природе подвержены ошибкам округления, и они могут накапливаться и становиться очень большими.
Например, общий фон (долго читать):
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
Вы можете попробовать использовать высокоточную библиотеку вычислений.
Например, некоторые хорошие варианты упоминаются в этом ответе:
/questions/14683447/biblioteka-vyisokoj-tochnosti-java-s-plavayuschej-tochkoj/14683461#14683461
редактировать: вы можете попытаться проанализировать выражение, которое вы используете, с помощью https://herbie.uwplse.org/ (но веб-версия истекает для вашего выражения, вам придется загрузить их программное обеспечение)