diff options
| author | gonzo <gonzo@toniatuh.com> | 2023-06-10 14:04:26 +0200 |
|---|---|---|
| committer | gonzo <gonzo@toniatuh.com> | 2023-06-10 14:04:26 +0200 |
| commit | 2b2490fb438ba2a68929a3d3bea9817b3de36633 (patch) | |
| tree | daf3efe142c800acb688da7f7a710326eb67d617 | |
| parent | b2ab7c3665c0a9eee6e8f208f1974253ce37eec9 (diff) | |
| download | loan_calc-2b2490fb438ba2a68929a3d3bea9817b3de36633.tar.gz | |
edge case in mortgage loan
| -rw-r--r-- | mortgage_loan.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/mortgage_loan.c b/mortgage_loan.c index a9ab28b..2751aff 100644 --- a/mortgage_loan.c +++ b/mortgage_loan.c @@ -13,12 +13,18 @@ contract *mort_init(int n, int d, double r, double P) { } double mort_update(contract *c) { + double tmp; if (c->k > c->n) return 0.0; if (c->k == c->d) { - c->A = - (c->P * c->r * pow(1.0 + c->r, (double)(c->n - c->k))); - c->A = c->A / (1.0 - pow(1.0 + c->r, (double)(c->n - c->k))); + if (c->r == 0.0) { + c->A = c->P / c->n; + } else { + tmp = pow(1.0 + c->r, (double)(c->n - c->k)); + c->A = - (c->P * c->r * tmp); + c->A = c->A / (1.0 - tmp); + } } c->k++; c->I = c->r * c->P; |
