>void laguer(Complex a[], int m, Complex *x, int *its) >{ > int iter, j; > double abx, abp, abm, err; > Complex dx,x1, b, d, f, g, h, sq, gp, gm, g2; > static double frac[MR+1] = {0.0, 0.5, 0.25, 0.75, 0.13, > 0.38, 0.62, 0.88, 1.0}; > Complex xx, yy; > > for (iter = 1; iter <= MAXIT; iter++) { > *its = iter; > b = a[m]; > err = abs(b); > d = f = Complex(0.0, 0.0); > abx = abs(*x); > for (j=m-1;j>=0;j--) { > f = f = (*x) * f + d; > d = (*x) * d + b; > b = (*x) * b + a[j]; > err = abs(b) + abx * err; > } > err *= EPSS; > > if ( abs(b) <= err ) return; > g = d/b; > g2 = g*g; > h = g2 - f/b * 2.0; > sq = sqrt( (h*(m*1.0) - g2) * ((m-1)*1.0) ); > gp = g + sq; > gm = g - sq; > abp = abs(gp); > abm = abs(gm); > if (abp < abm) gp=gm; > > dx = (((abp > 0.0) || (abm>0)) > ? Complex(m,0)/gp > : Complex( cos(iter), sin(iter)) * exp( log(1+abx) ) ); > > // : Complex( cos(iter), sin(iter) ) * exp( log(1+abx) ) ); > > x1 = *x - dx; > if (real(*x) == real(x1) && imag(*x) == imag(x1)) return; > if (iter % MT) *x = x1; > else *x = *x - frac[iter/MT] * dx; > } > assert( 0 ); > // exit(1); >} >It would seem to me that this would be a good place to use the power of VFP to either use a DLL or FLL based on this C++ code. I would probably say DLL since it doesn't appear it needs to access any VFP functionality. That way you use the best tool for each part of the task (I'm assuming that you determined that the rest of the functionality was best done in VFP).