diff options
4 files changed, 92 insertions, 84 deletions
diff --git a/src/Scilab2C/SCI2CTests/test999_WorkingDir/scilabcode/mainfunction.sci b/src/Scilab2C/SCI2CTests/test999_WorkingDir/scilabcode/mainfunction.sci index 0231faa2..d56328d1 100644 --- a/src/Scilab2C/SCI2CTests/test999_WorkingDir/scilabcode/mainfunction.sci +++ b/src/Scilab2C/SCI2CTests/test999_WorkingDir/scilabcode/mainfunction.sci @@ -1,56 +1,30 @@ //SCI2C: DEFAULT_PRECISION= DOUBLE function mainfunction()
-//test multiplication - -//d0d0 -disp (5/3) -//d0z0 -disp (1/%i) -//z0d0 -disp (%i/5) -//z0z0 -disp (%i/(3*%i)) - -a=[1 2 3; 4 5 6] +//test exp and expm + +//d0 +disp (exp(3)) + +//z0 +disp (exp(3+%i*4)) + + +a=[1 2 3; 5 5 6] c=[4 2 3 ;8 8 4; 3 4 5] b=[1+%i,2+4*%i 3+1*%i; 4 5 6+2*%i] d=[4 2 3 ;8 8-1*%i 4; 3+4*%i 4 5] -e=[4 2 ;3 8 ;8-1*%i 4; 3+4*%i 4] - -//d2d2 -disp(a*c) -disp(a.*a) -//d2z2 -disp(a*d) -disp(a.*b) -//z2d2 -disp(e*a) -disp(b.*a) -//z2z2 -disp(b*d) -disp(b.*b) - - - - -//d2d0 -disp(a*1) -//d0d2 -disp(1*a) -//d2z0 -disp(a*%i) -//z0d2 -disp(%i*a) - - -//z2d0 -disp(b*1) -//d0z2 -disp(1*b) -//z2z0 -disp(b*%i) -//z0z2 -disp(%i*b) + +//d2 +disp (exp(a)) +disp (exp(c)) +disp (expm(c)) + +//z2 +disp (exp(b)) +disp (exp(d)) +disp (expm(d)) + + endfunction diff --git a/src/Scilab2C/Scilab2C/CCodeGeneration/SCI2CMakefileTemplate.rc b/src/Scilab2C/Scilab2C/CCodeGeneration/SCI2CMakefileTemplate.rc index 735f07f3..d88537e7 100644 --- a/src/Scilab2C/Scilab2C/CCodeGeneration/SCI2CMakefileTemplate.rc +++ b/src/Scilab2C/Scilab2C/CCodeGeneration/SCI2CMakefileTemplate.rc @@ -70,14 +70,6 @@ SWSRCS = \ $(CSRCDIR)/dmeana.c \ $(CSRCDIR)/cmeana.c \ $(CSRCDIR)/zmeana.c \ - $(CSRCDIR)/sexps.c \ - $(CSRCDIR)/dexps.c \ - $(CSRCDIR)/cexps.c \ - $(CSRCDIR)/zexps.c \ - $(CSRCDIR)/sexpa.c \ - $(CSRCDIR)/dexpa.c \ - $(CSRCDIR)/cexpa.c \ - $(CSRCDIR)/zexpa.c \ $(CSRCDIR)/slog10s.c \ $(CSRCDIR)/dlog10s.c \ $(CSRCDIR)/slog10a.c \ @@ -260,8 +252,33 @@ SWSRCS = \ $(CSRCDIR)/cldivma.c \ $(CSRCDIR)/dldivma.c \ $(CSRCDIR)/sldivma.c \ - $(CSRCDIR)/zldivma.c - + $(CSRCDIR)/zldivma.c \ +##### invesion #########\ + $(CSRCDIR)/cinverma.c \ + $(CSRCDIR)/dinverma.c \ + $(CSRCDIR)/sinverma.c \ + $(CSRCDIR)/zinverma.c \ +##### exp and expm #########\ + $(CSRCDIR)/cexps.c \ + $(CSRCDIR)/dexps.c \ + $(CSRCDIR)/cexps.c \ + $(CSRCDIR)/zexps.c \ + $(CSRCDIR)/cexpa.c \ + $(CSRCDIR)/dexpa.c \ + $(CSRCDIR)/sexpa.c \ + $(CSRCDIR)/zexpa.c \ + $(CSRCDIR)/cexpma.c \ + $(CSRCDIR)/dexpma.c \ + $(CSRCDIR)/sexpma.c \ + $(CSRCDIR)/zexpma.c \ +##### frexp #########\ + $(CSRCDIR)/dfrexps.c \ + $(CSRCDIR)/sfrexps.c \ +##### frexp #########\ + $(CSRCDIR)/cinfnorma.c \ + $(CSRCDIR)/dinfnorma.c \ + $(CSRCDIR)/sinfnorma.c \ + $(CSRCDIR)/zinfnorma.c diff --git a/src/operations/interface/int_OpDotSlash.h b/src/operations/interface/int_OpDotSlash.h index 87c79a81..a0f097de 100644 --- a/src/operations/interface/int_OpDotSlash.h +++ b/src/operations/interface/int_OpDotSlash.h @@ -38,62 +38,71 @@ #define s0s2OpDotSlashs2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=in1/in2[i];} + sinverma(in2,out,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=in1*out[i];} #define d0d2OpDotSlashd2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=in1/in2[i];} + dinverma(in2,out,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=in1*out[i];} #define c0c2OpDotSlashc2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=crdivs(in1,in2[i]);} + cinverma(in2,out,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=cmuls(in1,out[i]);} #define z0z2OpDotSlashz2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=zrdivs(in1,in2[i]);} + zinverma(in2,out,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=zmuls(in1,out[i]);} #define s0c2OpDotSlashc2(in1,in2,size,out) c0c2OpDotSlashc2(FloatComplex(in1,0),in2,size,out) -/* On transforme d0 en z0 */ -#define d0z2OpDotSlashz2(in1,in2,size,out) z0z2OpDotSlashz2(DoubleComplex(in1,0),in2,size,out) +#define d0z2OpDotSlashz2(in1,in2,size,out) z0z2OpDotSlashz2(DoubleComplex(in1,0),in2,size,out) +/* FIXME: malloc */ #define c0s2OpDotSlashc2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=crdivs(in1,FloatComplex(in2[i],0));} + float* temp = malloc((uint)(size[0]*size[1])*sizeof(float));\ + sinverma(in2,temp,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=cmuls(in1,FloatComplex(temp[i],0));} +/* FIXME: malloc */ #define z0d2OpDotSlashz2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=zrdivs(in1,DoubleComplex(in2[i],0));} + double* temp = malloc((uint)(size[0]*size[1])*sizeof(double));\ + dinverma(in2,temp,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=zmuls(in1,DoubleComplex(temp[i],0));} /* Matrix / Scalar */ #define s2s0OpDotSlashs2(in1,size,in2,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=in1[i]/in2;} + for (i=0;i<size[0]*size[1];i++) out[i]=in1[i]/in2;} #define d2d0OpDotSlashd2(in1,size,in2,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=in1[i]/in2;} + for (i=0;i<size[0]*size[1];i++) out[i]=in1[i]/in2;} #define c2c0OpDotSlashc2(in1,size,in2,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=crdivs(in1[i],in2);} + for (i=0;i<size[0]*size[1];i++) out[i]=crdivs(in1[i],in2);} #define z2z0OpDotSlashz2(in1,size,in2,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=zrdivs(in1[i],in2);} + for (i=0;i<size[0]*size[1];i++) out[i]=zrdivs(in1[i],in2);} #define s2c0OpDotSlashc2(in1,size,in2,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=crdivs(FloatComplex(in1[i],0),in2);} + for (i=0;i<size[0]*size[1];i++) out[i]=crdivs(FloatComplex(in1[i],0),in2);} #define d2z0OpDotSlashz2(in1,size,in2,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=zrdivs(DoubleComplex(in1[i],0),in2);} + for (i=0;i<size[0]*size[1];i++) out[i]=zrdivs(DoubleComplex(in1[i],0),in2);} #define c2s0OpDotSlashc2(in1,size,in2,out) c2c0OpDotSlashc2(in1,size,FloatComplex(in2,0),out) @@ -114,16 +123,16 @@ #define z2z2OpDotSlashz2(in1,size1,in2,size2,out) zrdiva(in1,in2,size2[0]*size2[1],out) -#define c2s2OpDotSlashc2(in1,size1,in2,size2,out) {int i=0;\ +#define c2s2OpDotSlashc2(in1,size1,in2,size2,out) {int i=0;\ for (i=0;i<size1[0]*size2[1];i++) out[i]=crdivs(in1[i],FloatComplex(in2[i],0));} -#define s2c2OpDotSlashc2(in1,size1,in2,size2,out) {int i=0;\ +#define s2c2OpDotSlashc2(in1,size1,in2,size2,out) {int i=0;\ for (i=0;i<size1[0]*size2[1];i++) out[i]=crdivs(FloatComplex(in1[i],0),in2[i]);} -#define z2d2OpDotSlashz2(in1,size1,in2,size2,out) {int i=0;\ +#define z2d2OpDotSlashz2(in1,size1,in2,size2,out) {int i=0;\ for (i=0;i<size1[0]*size2[1];i++) out[i]=zrdivs(in1[i],DoubleComplex(in2[i],0));} -#define d2z2OpDotSlashz2(in1,size1,in2,size2,out) {int i=0;\ +#define d2z2OpDotSlashz2(in1,size1,in2,size2,out) {int i=0;\ for (i=0;i<size1[0]*size2[1];i++) out[i]=zrdivs(DoubleComplex(in1[i],0),in2[i]);} diff --git a/src/operations/interface/int_OpSlash.h b/src/operations/interface/int_OpSlash.h index 40c135e5..440b05a0 100644 --- a/src/operations/interface/int_OpSlash.h +++ b/src/operations/interface/int_OpSlash.h @@ -38,19 +38,23 @@ #define s0s2OpSlashs2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=in1/in2[i];} + sinverma(in2,out,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=in1*out[i];} #define d0d2OpSlashd2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=in1/in2[i];} + dinverma(in2,out,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=in1*out[i];} #define c0c2OpSlashc2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=crdivs(in1,in2[i]);} + cinverma(in2,out,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=cmuls(in1,out[i]);} #define z0z2OpSlashz2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=zrdivs(in1,in2[i]);} + zinverma(in2,out,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=zmuls(in1,out[i]);} @@ -60,13 +64,17 @@ #define d0z2OpSlashz2(in1,in2,size,out) z0z2OpSlashz2(DoubleComplex(in1,0),in2,size,out) - +/* FIXME: malloc */ #define c0s2OpSlashc2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=crdivs(in1,FloatComplex(in2[i],0));} - + float* temp = malloc((uint)(size[0]*size[1])*sizeof(float));\ + sinverma(in2,temp,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=cmuls(in1,FloatComplex(temp[i],0));} +/* FIXME: malloc */ #define z0d2OpSlashz2(in1,in2,size,out) {int i=0;\ - for (i=0;i<size[0]*size[1];i++) out[i]=zrdivs(in1,DoubleComplex(in2[i],0));} + double* temp = malloc((uint)(size[0]*size[1])*sizeof(double));\ + dinverma(in2,temp,size[0]);\ + for (i=0;i<size[0]*size[1];i++) out[i]=zmuls(in1,DoubleComplex(temp[i],0));} /* Matrix / Scalar */ |