#include "loans.h" contract *sl_init(int n, int d, double r, double P) { if ((n < 0)) return NULL; if ((d >= n)||(d < 0)) return NULL; contract *c = (contract *)calloc(1, sizeof(contract)); c->n = (unsigned int)n; c->d = (unsigned int)d; c->r = r; c->P = P; return c; } double sl_update(contract *c) { if (c->k > c->n) return 0.0; if (c->k == c->d) c->D = c->P/(double)(c->n - c->k); c->k++; c->I = c->r * c->P; if (c->k <= c->d) c->P += c->I; else { c->P = c->P - c->D; c->A = c->D + c->I; /* c->D is fixed ! */ } return c->A; } void sl_free(contract *c) { free(c); }