=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/pari.c,v retrieving revision 1.7 retrieving revision 1.10 diff -u -p -r1.7 -r1.10 --- OpenXM_contrib2/asir2000/engine/pari.c 2005/10/10 15:16:38 1.7 +++ OpenXM_contrib2/asir2000/engine/pari.c 2009/09/10 01:51:54 1.10 @@ -45,9 +45,10 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/engine/pari.c,v 1.6 2003/02/14 22:29:09 ohara Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/engine/pari.c,v 1.9 2009/03/27 14:42:29 ohara Exp $ */ #include "ca.h" + #if defined(PARI) #include "base.h" #include @@ -58,12 +59,23 @@ void patori_i(GEN,N *); void ritopa(Obj,GEN *); void ritopa_i(N,int,GEN *); +// PARI_VERSION(2,2,12) == 131596 +#if PARI_VERSION_CODE >= 131596 +#define prec precreal +#endif extern long prec; extern int paristack; +long get_pariprec() { + return prec; +} +void set_pariprec(long p) { + prec = p; +} + void risa_pari_init() { pari_init(paristack,2); - prec = 4; + set_pariprec(4); } void create_pari_variable(index) @@ -92,6 +104,16 @@ GEN a; return lg(a); } +void gpui_ri(Obj a, Obj e, Obj *c) +{ + GEN pa,pe,z; + long ltop,lbot; + + ltop = avma; ritopa(a,&pa); ritopa(e,&pe); lbot = avma; + z = gerepile(ltop,lbot,gpui(pa,pe,get_pariprec())); + patori(z,c); cgiv(z); +} + void ritopa(a,rp) Obj a; GEN *rp; @@ -250,7 +272,7 @@ Obj *rp; } } -#if defined(LONG_IS_32BIT) +#if SIZEOF_LONG == 4 void ritopa_i(a,s,rp) N a; int s; @@ -285,9 +307,8 @@ N *rp; for ( j = 0, b = (unsigned int *)BD(z); j < l; j++ ) b[l-j-1] = ((unsigned int *)g)[j+2]; } -#endif -#if defined(LONG_IS_64BIT) +#elif SIZEOF_LONG == 8 void ritopa_i(a,s,rp) N a; int s;