From 6eabe2cfa5f0cb98ba8aa9a8fc895f28fd7a8bef Mon Sep 17 00:00:00 2001 From: torset Date: Fri, 20 Feb 2009 09:52:52 +0000 Subject: change prototypes of spec : if real on input, return real, not complex --- src/matrixOperations/spec/dspeca.c | 8 +++--- src/matrixOperations/spec/sspeca.c | 8 +++--- src/matrixOperations/spec/testDoubleSpec.c | 23 +++-------------- src/matrixOperations/spec/testFloatSpec.c | 41 +++++++++++++----------------- 4 files changed, 29 insertions(+), 51 deletions(-) diff --git a/src/matrixOperations/spec/dspeca.c b/src/matrixOperations/spec/dspeca.c index c86f3983..6a4d2c61 100644 --- a/src/matrixOperations/spec/dspeca.c +++ b/src/matrixOperations/spec/dspeca.c @@ -18,7 +18,7 @@ #include "stdio.h" -void dspeca(double* in, int rows,doubleComplex* out){ +void dspeca(double* in, int rows,double* out){ int i=0, j=0; int symmetric=0; int INFO=0; @@ -52,17 +52,15 @@ void dspeca(double* in, int rows,doubleComplex* out){ /* apply lapack function according to symmetry */ - if(symmetric){ - + if(symmetric){ C2F(dsyev)( "N", "U", &rows, in, &rows, outReal, pdblWork, &iWorkSize, &INFO ); - dzerosa(outImag,1,rows); } else { C2F(dgeev)( "N", "N", &rows, inCopy, &rows, outReal, outImag, pdblLeftvectors, &rows, pdblRightvectors, &rows, pdblWork, &iWorkSize, &INFO ); } - for (i=0;i1e-16) assert( fabs(zreals(out[i])-resultR[i]) / fabs(zreals(out[i])) <1e-15); - else assert(1); - if (zimags(out[i])>1e-16) assert( fabs(zimags(out[i])-resultI[i]) / fabs(zimags(out[i])) <1e-16); + if (out[i]>1e-16) assert( fabs(out[i]-resultR[i]) / fabs(out[i]) <1e-15); else assert(1); } - - - dspeca(in2,2,out); - for(i=0;i<2;i++){ - if (zreals(out[i])>1e-16) assert( fabs(zreals(out[i])-result2R[i]) / fabs(zreals(out[i])) <1e-16); - else assert(1); - if (zimags(out[i])>1e-16) assert( fabs(zimags(out[i])-result2I[i]) / fabs(zimags(out[i])) <1e-15); - else assert(1); - } } diff --git a/src/matrixOperations/spec/testFloatSpec.c b/src/matrixOperations/spec/testFloatSpec.c index 421746ff..2cd8f45e 100644 --- a/src/matrixOperations/spec/testFloatSpec.c +++ b/src/matrixOperations/spec/testFloatSpec.c @@ -19,42 +19,37 @@ static void sspecaTest(void){ float in[4]={1.0f,1.0f,1.0f,3.0f}; float resultR[2]={0.5857864376269050765700f,3.4142135623730949234300f}; - float resultI[2]={0.0f,0.0f}; + + float in1[4]={0.0f,4.0f,1.0f,0.0f}; + float result[2]={2.0f,-2.0f}; float in2[4]={1.0f,1.0f,-2.0f,3.0f}; - float result2R[2]={1.9999999999999997779554f,1.9999999999999997779554f}; - float result2I[2]={0.9999999999999997779554f,-0.9999999999999997779554f}; - - floatComplex *out; + + float *out; int i; - out=malloc((uint)2*sizeof(floatComplex)); + out=malloc((uint)2*sizeof(float)); sspeca(in,2,out); - for (i=0;i<2;i++) printf("%f+%f*i\n",creals(out[i]) ,cimags(out[i])); + for (i=0;i<2;i++) printf("%f\n",out[i]); for(i=0;i<2;i++){ - if (creals(out[i])>1e-16) assert( fabs(creals(out[i])-resultR[i]) / fabs(creals(out[i])) <1e-16); + if (out[i]>1e-16) assert( fabs(out[i]-resultR[i]) / fabs(out[i]) <1e-16); else assert(1); - if (cimags(out[i])>1e-16) assert( fabs(cimags(out[i])-resultI[i]) / fabs(cimags(out[i])) <1e-16); - else assert(1); - } - - - - sspeca(in2,2,out); - - for (i=0;i<2;i++) printf("%f+%f*i\n",creals(out[i]) ,cimags(out[i])); + } + + sspeca(in1,2,out); + for (i=0;i<2;i++) printf("%f\n",out[i]); for(i=0;i<2;i++){ - if (creals(out[i])>1e-16) assert( fabs(creals(out[i])-result2R[i]) / fabs(creals(out[i])) <1e-16); + if (out[i]>1e-16) assert( fabs(out[i]-result[i]) / fabs(out[i]) <1e-16); else assert(1); - if (cimags(out[i])>1e-16) assert( fabs(cimags(out[i])-result2I[i]) / fabs(cimags(out[i])) <1e-16); - else assert(1); - } -} - + } + + sspeca(in2,2,out); + for (i=0;i<2;i++) printf("%f\n",out[i]); +} static void cspecaTest(void){ -- cgit