MCPcopy Create free account
hub / github.com/BoevaLab/FREEC / mv_complex_generic

Method mv_complex_generic

src/ialglib.cpp:288–327  ·  view source on GitHub ↗

This is generic C implementation of mv_complex It may work with unaligned data. ********************************************************************/

Source from the content-addressed store, hash-verified

286It may work with unaligned data.
287********************************************************************/
288void ialglib::mv_complex_generic(int m, int n, const double *a, const double *x, ap::complex *cy, double *dy, int stride, ap::complex alpha, ap::complex beta)
289{
290 int i, j;
291 const double *pa, *parow, *pb;
292
293 parow = a;
294 for(i=0; i<m; i++)
295 {
296 double v0 = 0, v1 = 0;
297 pa = parow;
298 pb = x;
299 for(j=0; j<n; j++)
300 {
301 v0 += pa[0]*pb[0];
302 v1 += pa[0]*pb[1];
303 v0 -= pa[1]*pb[1];
304 v1 += pa[1]*pb[0];
305
306 pa += 2;
307 pb += 2;
308 }
309 if( cy!=NULL )
310 {
311 double tx = (beta.x*cy->x-beta.y*cy->y)+(alpha.x*v0-alpha.y*v1);
312 double ty = (beta.x*cy->y+beta.y*cy->x)+(alpha.x*v1+alpha.y*v0);
313 cy->x = tx;
314 cy->y = ty;
315 cy+=stride;
316 }
317 else
318 {
319 double tx = (beta.x*dy[0]-beta.y*dy[1])+(alpha.x*v0-alpha.y*v1);
320 double ty = (beta.x*dy[1]+beta.y*dy[0])+(alpha.x*v1+alpha.y*v0);
321 dy[0] = tx;
322 dy[1] = ty;
323 dy += 2*stride;
324 }
325 parow += 2*alglib_c_block;
326 }
327}
328
329
330/********************************************************************

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected