@@ -3584,7 +3584,7 @@ inline Status kmn(int m, int n, T c, T cv, int kd, T *df, T *dn, T *ck1, T *ck2)
3584
3584
dn[m] = pow (-1 , ip) * dnp * cs / ((2.0 * m - 1.0 ) * (2.0 * m + 1.0 - 4.0 * ip) * tp[m]);
3585
3585
3586
3586
for (k = m + 2 ; k <= nn; k++)
3587
- dn[k - 1 ] * = rk[k - 1 ];
3587
+ dn[k - 1 ] = rk[k - 1 ] * dn[k - 2 ];
3588
3588
3589
3589
r1 = 1.0 ;
3590
3590
for (j = 1 ; j <= (n + m + ip) / 2 ; j++) {
@@ -3631,10 +3631,10 @@ inline Status kmn(int m, int n, T c, T cv, int kd, T *df, T *dn, T *ck1, T *ck2)
3631
3631
for (j = 1 ; j <= m; ++j)
3632
3632
r5 = r5 * (j + m) / c;
3633
3633
3634
- g0 = dn[m - 1 ];
3635
-
3636
3634
if (m == 0 )
3637
3635
g0 = df[0 ];
3636
+ else
3637
+ g0 = dn[m - 1 ];
3638
3638
3639
3639
sb0 = (ip + 1.0 ) * pow (c, ip + 1 ) / (2.0 * ip * (m - 2.0 ) + 1.0 ) / (2.0 * m - 1.0 );
3640
3640
*ck2 = pow (-1 , ip) * sb0 * r4 * r5 * g0 / r1 * su0;
@@ -5199,15 +5199,15 @@ Status rmn2sp(int m, int n, T c, T x, T cv, int kd, T *df, T *r2f, T *r2d) {
5199
5199
sw = 0.0 ;
5200
5200
for (k = 1 ; k <= nm; k++) {
5201
5201
j = 2 * k - 2 + m + ip;
5202
- su0 += df[k - 1 ] * qm[j - 1 ];
5202
+ su0 += df[k - 1 ] * qm[j];
5203
5203
if ((k > nm1) && (fabs (su0 - sw) < fabs (su0) * eps)) { break ; }
5204
5204
sw = su0;
5205
5205
}
5206
5206
5207
5207
sd0 = 0.0 ;
5208
5208
for (k = 1 ; k <= nm; k++) {
5209
5209
j = 2 * k - 2 + m + ip;
5210
- sd0 += df[k - 1 ] * qd[j - 1 ];
5210
+ sd0 += df[k - 1 ] * qd[j];
5211
5211
if (k > nm1 && fabs (sd0 - sw) < fabs (sd0) * eps) { break ; }
5212
5212
sw = sd0;
5213
5213
}
@@ -5219,8 +5219,8 @@ Status rmn2sp(int m, int n, T c, T x, T cv, int kd, T *df, T *r2f, T *r2d) {
5219
5219
if (j < 0 ) {
5220
5220
j = -j - 1 ;
5221
5221
}
5222
- su1 += dn[k - 1 ] * qm[j - 1 ];
5223
- sd1 += dn[k - 1 ] * qd[j - 1 ];
5222
+ su1 += dn[k - 1 ] * qm[j];
5223
+ sd1 += dn[k - 1 ] * qd[j];
5224
5224
}
5225
5225
5226
5226
ga = pow ((x - 1.0 ) / (x + 1.0 ), 0.5 * m);
@@ -5263,17 +5263,19 @@ Status rmn2sp(int m, int n, T c, T x, T cv, int kd, T *df, T *r2f, T *r2d) {
5263
5263
}
5264
5264
su2 = 0.0 ;
5265
5265
ki = (2 * m + 1 + ip) / 2 ;
5266
+ ki = std::max (1 , ki);
5267
+ assert ((ki-1 ) >= 0 );
5266
5268
nm3 = nm + ki;
5267
5269
for (k = ki; k <= nm3; k++) {
5268
5270
j = 2 * k - 1 - m - ip;
5269
- su2 += dn[k - 1 ] * pm[j - 1 ];
5271
+ su2 += dn[k - 1 ] * pm[j];
5270
5272
if ((j > m) && (fabs (su2 - sw) < fabs (su2) * eps)) { break ; }
5271
5273
sw = su2;
5272
5274
}
5273
5275
sd2 = 0.0 ;
5274
5276
for (k = ki; k < nm3; k++) {
5275
5277
j = 2 * k - 1 - m - ip;
5276
- sd2 += dn[k - 1 ] * pd[j - 1 ];
5278
+ sd2 += dn[k - 1 ] * pd[j];
5277
5279
if (j > m && fabs (sd2 - sw) < fabs (sd2) * eps) { break ; }
5278
5280
sw = sd2;
5279
5281
}
0 commit comments