summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgonzo <gonzo@toniatuh.com>2023-06-10 14:04:26 +0200
committergonzo <gonzo@toniatuh.com>2023-06-10 14:04:26 +0200
commit2b2490fb438ba2a68929a3d3bea9817b3de36633 (patch)
treedaf3efe142c800acb688da7f7a710326eb67d617
parentb2ab7c3665c0a9eee6e8f208f1974253ce37eec9 (diff)
downloadloan_calc-2b2490fb438ba2a68929a3d3bea9817b3de36633.tar.gz
edge case in mortgage loan
-rw-r--r--mortgage_loan.c10
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;