Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Some challenging C code
Message
De
20/12/2006 22:58:18
Suhas Hegde
Dental Surgeon
Sirsi, Inde
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
01179188
Message ID:
01179427
Vues:
8
>>I've been porting an old application into FoxPro this week and thought I'd have it finished up pretty quickly...until I hit this particular function. It's some C code that's heavy on complex number arithmetic. I went at it from a couple different angles (handling complex numbers as arrays, handling them as objects) in Fox, but in the end, I never got anything very promising. Anyone have any smart ideas on converting this function into FoxPro? Thanks!
>>
>>
>>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).


Hi,

How can i build a dll that would take a array from vfp in a c dll ? A fll would make it easy but need to how to do it in a cdecl dll ?

thanx
suhashegde
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform