From: Pearu P. <pe...@ce...> - 2002-03-03 15:10:02
|
Hi again, On Sun, 3 Mar 2002, Pearu Peterson wrote: > So, I would have expected CDOUBLE_to_CDOUBLE to be > > static void CDOUBLE_to_CDOUBLE(double *ip, int ipstep, > double *op, int opstep, int n) > { int i; > for(i=0;i<n;i++,ip+=ipstep,op+=opstep) { > *op = (double)*ip; /* copy real part */ > *(op+1) = (double)*(ip+1); /* copy imaginary part that always > follows the real part in memory */ > } > } After some testing I found that CDOUBLE_to_CDOUBLE should be static void CDOUBLE_to_CDOUBLE(double *ip, int ipstep, double *op, int opstep, int n) { int i; for(i=0;i<n;i++,ip+=2*ipstep,op+=2*opstep) { *op = (double)*ip; /* copy real part */ *(op+1) = (double)*(ip+1); /* copy imaginary part that always follows the real part in memory */ } } In fact, by redefining CDOUBLE_to_CDOUBLE, CDOUBLE_to_CFLOAT, CFLOAT_to_CDOUBLE, and CFLOAT_to_CFLOAT functions as above, I get everything work correctly for copy_ND_array. So, what it indicates? Is copy_ND_array a hack or is copying Numeric complex arrays broken? I don't know. I could not produce any incorrect results when using default Numeric functions, though. But I did not tried really hard either because I am not sure if the above makes sense for you. Regards, Pearu |