aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lossdistrib.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/lossdistrib.c b/lossdistrib.c
index fef0016d..5b44cbda 100644
--- a/lossdistrib.c
+++ b/lossdistrib.c
@@ -26,11 +26,11 @@ void lossdistrib(double *p, int *np, double *w, double *S, int *N, double *q) {
d2 = ceil(d);
p1 = p[i] * (d2-d);
p2 = p[i] - p1;
- memcpy(qtemp, q, M * sizeof(double));
+ memcpy(qtemp, q, MIN(M, *N) * sizeof(double));
for(j=0; j < MIN(M, *N); j++){
q[j] = (1-p[i]) * q[j];
}
- for(j=0; j < MIN(M, *N); j++){
+ for(j=0; j < MIN(M, *N-d2); j++){
q[d1+j] += p1 * qtemp[j];
q[d2+j] += p2 * qtemp[j];
};
@@ -127,15 +127,15 @@ void lossdistrib_joint( double *p, int *np, double *w, double *S, int *N, double
w4 = alpha2 * beta1;
for(n=0; n<MIN(My, *N); n++){
- memcpy(qtemp+n*(*N), q+n*(*N), Mx * sizeof(double));
+ memcpy(qtemp+n*(*N), q+n*(*N), MIN(Mx, *N) * sizeof(double));
}
for(n=0; n<MIN(My, *N); n++){
for(m=0; m<MIN(Mx, *N); m++){
q[m+(*N)*n] = (1-p[k])* q[m+(*N)*n];
}
}
- for(n=0; n < MIN(My, *N); n++){
- for(m=0; m < MIN(Mx, *N); m++){
+ for(n=0; n < MIN(My, *N-j-1); n++){
+ for(m=0; m < MIN(Mx, *N-i-1); m++){
q[i+m+(*N)*(j+n)] += w1 * p[k] * qtemp[m+(*N)*n];
q[i+m+(*N)*(j+1+n)] += w2 * p[k] * qtemp[m+(*N)*n];
q[i+1+m+(*N)*(j+1+n)] += w3 * p[k] * qtemp[m+(*N)*n];
@@ -189,11 +189,11 @@ void recovdist(double *dp, double *pp, int *n, double *w, double *S, int *N, dou
dp2 = dp[i] - dp1;
pp1 = pp[i] * (d2u -d2);
pp2 = pp[i] - pp1;
- memcpy(qtemp, q, M * sizeof(double));
+ memcpy(qtemp, q, MIN(M, *N) * sizeof(double));
for(j = 0; j< MIN(M, *N); j++){
q[j] = (1-dp[i]-pp[i]) * q[j];
}
- for(j=0; j < MIN(M, *N); j++){
+ for(j=0; j < MIN(M, *N-d2u); j++){
q[d1l+j] += dp1 * qtemp[j];
q[d1u+j] += dp2 * qtemp[j];
q[d2l+j] += pp1 * qtemp[j];
@@ -242,15 +242,15 @@ void lossdistrib_prepay_joint(double *dp, double *pp, int *ndp, double *w, doubl
w4 = alpha2 * beta1;
for(n=0; n<MIN(My, *N); n++){
- memcpy(qtemp+n*(*N), q+n*(*N), Mx * sizeof(double));
+ memcpy(qtemp+n*(*N), q+n*(*N), MIN(Mx, *N) * sizeof(double));
}
for(n=0; n<MIN(My, *N); n++){
for(m=0; m<MIN(Mx, *N); m++){
q[m+(*N)*n] = (1-dp[k]-pp[k]) * q[m+(*N)*n];
}
}
- for(n=0; n < MIN(My, *N); n++){
- for(m=0; m < MIN(Mx, *N); m++){
+ for(n=0; n < MIN(My, *N-j2-1); n++){
+ for(m=0; m < MIN(Mx, *N-i-1); m++){
q[i+m+(*N)*(j1+n)] += w1 * dp[k] * qtemp[m+(*N)*n];
q[i+m+(*N)*(j1+1+n)] += w2 * dp[k] * qtemp[m+(*N)*n];
q[i+1+m+(*N)*(j1+1+n)] += w3 * dp[k] * qtemp[m+(*N)*n];