=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/cplx.c,v retrieving revision 1.3 retrieving revision 1.7 diff -u -p -r1.3 -r1.7 --- OpenXM_contrib2/asir2000/engine/cplx.c 2000/08/22 05:04:05 1.3 +++ OpenXM_contrib2/asir2000/engine/cplx.c 2015/08/20 08:42:07 1.7 @@ -45,17 +45,10 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/engine/cplx.c,v 1.2 2000/08/21 08:31:27 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/engine/cplx.c,v 1.6 2009/03/27 14:42:29 ohara Exp $ */ #include "ca.h" #include "base.h" -#if PARI -#include "genpari.h" -void patori(GEN,Obj *); -void patori_i(GEN,N *); -void ritopa(Obj,GEN *); -void ritopa_i(N,int,GEN *); -#endif void toreim(a,rp,ip) Num a; @@ -63,7 +56,11 @@ Num *rp,*ip; { if ( !a ) *rp = *ip = 0; +#if defined(INTERVAL) + else if ( NID(a) <= N_PRE_C ) { +#else else if ( NID(a) <= N_B ) { +#endif *rp = a; *ip = 0; } else { *rp = ((C)a)->r; *ip = ((C)a)->i; @@ -93,7 +90,11 @@ Num *c; *c = b; else if ( !b ) *c = a; +#if defined(INTERVAL) + else if ( (NID(a) <= N_PRE_C) && (NID(b) <= N_PRE_C ) ) +#else else if ( (NID(a) <= N_B) && (NID(b) <= N_B ) ) +#endif addnum(0,a,b,c); else { toreim(a,&ar,&ai); toreim(b,&br,&bi); @@ -112,7 +113,11 @@ Num *c; chsgnnum(b,c); else if ( !b ) *c = a; +#if defined(INTERVAL) + else if ( (NID(a) <= N_PRE_C) && (NID(b) <= N_PRE_C ) ) +#else else if ( (NID(a) <= N_B) && (NID(b) <= N_B ) ) +#endif subnum(0,a,b,c); else { toreim(a,&ar,&ai); toreim(b,&br,&bi); @@ -129,7 +134,11 @@ Num *c; if ( !a || !b ) *c = 0; +#if defined(INTERVAL) + else if ( (NID(a) <= N_PRE_C) && (NID(b) <= N_PRE_C ) ) +#else else if ( (NID(a) <= N_B) && (NID(b) <= N_B ) ) +#endif mulnum(0,a,b,c); else { toreim(a,&ar,&ai); toreim(b,&br,&bi); @@ -149,7 +158,11 @@ Num *c; error("divcplx : division by 0"); else if ( !a ) *c = 0; +#if defined(INTERVAL) + else if ( (NID(a) <= N_PRE_C) && (NID(b) <= N_PRE_C ) ) +#else else if ( (NID(a) <= N_B) && (NID(b) <= N_B ) ) +#endif divnum(0,a,b,c); else { toreim(a,&ar,&ai); toreim(b,&br,&bi); @@ -168,24 +181,14 @@ Num *c; { int ei; Num t; - extern long prec; if ( !e ) *c = (Num)ONE; else if ( !a ) *c = 0; - else if ( !INT(e) ) { -#if PARI - GEN pa,pe,z; - int ltop,lbot; - - ltop = avma; ritopa((Obj)a,&pa); ritopa((Obj)e,&pe); lbot = avma; - z = gerepile(ltop,lbot,gpui(pa,pe,prec)); - patori(z,(Obj *)c); cgiv(z); -#else - error("pwrcplx : can't calculate a fractional power"); -#endif - } else { + else if ( !INT(e) ) + error("pwrcplx : not implemented (use eval())."); + else { ei = SGN((Q)e)*QTOS((Q)e); pwrcplx0(a,ei,&t); if ( SGN((Q)e) < 0 ) @@ -221,7 +224,11 @@ Num a,*c; if ( !a ) *c = 0; +#if defined(INTERVAL) + else if ( NID(a) <= N_PRE_C ) +#else else if ( NID(a) <= N_B ) +#endif chsgnnum(a,c); else { chsgnnum(((C)a)->r,&r); chsgnnum(((C)a)->i,&i); @@ -236,12 +243,20 @@ Num a,b; int s; if ( !a ) { +#if defined(INTERVAL) + if ( !b || (NID(b)<=N_PRE_C) ) +#else if ( !b || (NID(b)<=N_B) ) +#endif return compnum(0,a,b); else return -1; } else if ( !b ) { +#if defined(INTERVAL) + if ( !a || (NID(a)<=N_PRE_C) ) +#else if ( !a || (NID(a)<=N_B) ) +#endif return compnum(0,a,b); else return 1;