=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/parif.c,v retrieving revision 1.10 retrieving revision 1.13 diff -u -p -r1.10 -r1.13 --- OpenXM_contrib2/asir2000/builtin/parif.c 2001/10/09 01:36:06 1.10 +++ OpenXM_contrib2/asir2000/builtin/parif.c 2003/01/28 09:03:06 1.13 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/parif.c,v 1.9 2001/10/03 01:47:30 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/parif.c,v 1.12 2002/09/04 04:57:46 saito Exp $ */ #include "ca.h" #include "parse.h" @@ -60,6 +60,7 @@ void patori_i(GEN,N *); void ritopa(Obj,GEN *); void ritopa_i(N,int,GEN *); +void Ptodouble(); void Peval(),Psetprec(),p_pi(),p_e(),p_mul(),p_gcd(); void asir_cgiv(GEN); @@ -70,6 +71,7 @@ void Psetprecword(); struct ftab pari_tab[] = { {"eval",Peval,-2}, {"setprec",Psetprec,-1}, + {"todouble",Ptodouble,1}, #if defined(INTERVAL) || 1 {"setprecword",Psetprecword,-1}, #endif @@ -122,6 +124,39 @@ int p; return (int)(p*PREC_CONV+3); } +void Ptodouble(arg,rp) +NODE arg; +Num *rp; +{ + double r,i; + Real real,imag; + Num num; + + asir_assert(ARG0(arg),O_N,"todouble"); + num = (Num)ARG0(arg); + if ( !num ) { + *rp = 0; + return; + } + switch ( NID(num) ) { + case N_R: case N_Q: case N_B: + r = ToReal(num); + MKReal(r,real); + *rp = (Num)real; + break; + case N_C: + r = ToReal(((C)num)->r); + i = ToReal(((C)num)->i); + MKReal(r,real); + MKReal(i,imag); + reimtocplx((Num)real,(Num)imag,rp); + break; + default: + *rp = num; + break; + } +} + void Peval(arg,rp) NODE arg; Obj *rp; @@ -351,7 +386,7 @@ struct pariftab pariftab[] = { {"indsort",indexsort,1}, {"initalg",initalg,1}, {"isfund",gisfundamental,1}, -{"isprime",gisprime,1}, +{"isprime",gisprime,2}, {"ispsp",gispsp,1}, {"isqrt",racine,1}, {"issqfree",gissquarefree,1}, @@ -362,16 +397,13 @@ struct pariftab pariftab[] = { {"keri",keri,1}, {"kerint",kerint,1}, {"kerintg1",kerint1,1}, -{"kerint2",kerint2,1}, {"length",(GEN(*)())glength,1}, {"lexsort",lexsort,1}, {"lift",lift,1}, {"lindep",lindep,1}, {"lll",lll,1}, -{"lllg1",lll1,1}, {"lllgen",lllgen,1}, {"lllgram",lllgram,1}, -{"lllgramg1",lllgram1,1}, {"lllgramgen",lllgramgen,1}, {"lllgramint",lllgramint,1}, {"lllgramkerim",lllgramkerim,1}, @@ -379,7 +411,6 @@ struct pariftab pariftab[] = { {"lllint",lllint,1}, {"lllkerim",lllkerim,1}, {"lllkerimgen",lllkerimgen,1}, -{"lllrat",lllrat,1}, {"lngamma",glngamma,1}, {"logagm",glogagm,1}, {"mat",gtomat,1},