P / Y C / Y - Рассчитать будущую стоимость (FV) из платежей (PMT) с начислением периода в год (C / Y) - PullRequest
0 голосов
/ 03 апреля 2019

Я занимаюсь проектом TVM и не совсем понимаю, как сложные проценты переводятся в код.В качестве справки я использую финансовый калькулятор BA II Plus.

Пример: Найти будущую стоимость выплат в размере 100 долл. США, осуществляемых в начале каждого месяца в течение 10 лет, если проценты начисляются на 5% ежеквартально.

В финансовом калькуляторе:

N: 120 (10y x 12m)

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 Ответ

0 голосов
/ 03 апреля 2019

Кажется, вы получаете числовые ошибки в вычислениях.

Вычисления с плавающей точкой по своей природе подвержены ошибкам округления, и они могут складываться и становиться очень большими.

например. общий фон (долго читать):

https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

Вы можете попробовать использовать высокоточную библиотеку вычислений.

например. некоторые хорошие варианты упоминаются в этом ответе:

https://stackoverflow.com/a/284588/9549171

edit: вы можете попытаться проанализировать выражение, которое вы используете, с помощью https://herbie.uwplse.org/ (но веб-версия истекает для вашего выражения, вам придется загрузить их программное обеспечение)

...