version 1.1, 2001/10/02 11:17:07 |
version 1.2, 2002/09/11 07:26:58 |
Line 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
|
Line 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
|
/* PARI header file (common to all versions) */ |
/* PARI header file (common to all versions) */ |
/* */ |
/* */ |
/******************************************************************/ |
/******************************************************************/ |
|
#ifdef STMT_START /* perl headers */ |
|
# undef STMT_START |
|
#endif |
|
#ifdef STMT_END |
|
# undef STMT_END |
|
#endif |
|
/* STMT_START { statements; } STMT_END; |
|
* can be used as a single statement, as in |
|
* if (x) STMT_START { ... } STMT_END; else ... |
|
* [ avoid "dangling else" problem in macros ] */ |
|
#define STMT_START do |
|
#define STMT_END while (0) |
|
/*=====================================================================*/ |
|
/* CATCH(numer) { |
|
* recovery |
|
* } TRY { |
|
* code |
|
* } ENDCATCH |
|
* will execute 'code', then 'recovery' if exception 'numer' is thrown |
|
* [ any exception if numer < 0 ]. |
|
* RETRY = as TRY, but execute 'recovery', then 'code' again [still catching] */ |
|
#define CATCH(err) { \ |
|
VOLATILE long __err = err; \ |
|
jmp_buf __env; \ |
|
void *__catcherr; \ |
|
if (setjmp(__env)) |
|
|
|
#define RETRY { __catcherr = err_catch(__err, __env, NULL); { |
|
#define TRY else { __catcherr = err_catch(__err, __env, NULL); { |
|
|
|
#define ENDCATCH }} err_leave(&__catcherr); } |
|
/*=====================================================================*/ |
|
|
#define bit_accuracy(x) (((x)-2) << TWOPOTBITS_IN_LONG) |
#define bit_accuracy(x) (((x)-2) << TWOPOTBITS_IN_LONG) |
|
|
#define GSTR(x) ((char*) (((GEN) (x)) + 1 )) |
#define GSTR(x) ((char*) (((GEN) (x)) + 1 )) |
Line 39 Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
|
Line 71 Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
|
#define absi mpabs |
#define absi mpabs |
#define negi mpneg |
#define negi mpneg |
#define negr mpneg |
#define negr mpneg |
#define mpnegz(x,y) {long av=avma;mpaff(mpneg(x),y);avma=av;} |
#define mpnegz(x,y) \ |
#define mpabsz(x,y) {long av=avma;mpaff(mpabs(x),y);avma=av;} |
STMT_START {gpmem_t av=avma;mpaff(mpneg(x),y);avma=av;} STMT_END |
#define absrz(x,z) mpabsz((x),(z)) |
#define mpabsz(x,y) \ |
#define negrz(x,z) mpnegz((x),(z)) |
STMT_START {gpmem_t av=avma;mpaff(mpabs(x),y);avma=av;} STMT_END |
|
#define absrz(x,z) mpabsz((x),(z)) |
|
#define negrz(x,z) mpnegz((x),(z)) |
|
|
/* Common global variables: */ |
/* Common global variables: */ |
|
|
extern PariOUT *pariOut, *pariErr; |
extern PariOUT *pariOut, *pariErr; |
extern FILE *pari_outfile, *logfile, *infile, *errfile; |
extern FILE *pari_outfile, *logfile, *infile, *errfile; |
|
|
extern long DEBUGFILES, DEBUGLEVEL, DEBUGMEM, precdl; |
extern ulong DEBUGFILES, DEBUGLEVEL, DEBUGMEM, precdl; |
extern long *ordvar; |
extern long *ordvar; |
extern GEN bernzone,gpi,geuler; |
extern GEN bernzone,gpi,geuler; |
extern GEN polvar,*polun,*polx,primetab; |
extern GEN polvar,*polun,*polx,primetab; |
Line 58 extern GEN gun,gdeux,ghalf,gi,gzero; |
|
Line 92 extern GEN gun,gdeux,ghalf,gi,gzero; |
|
extern const long lontyp[]; |
extern const long lontyp[]; |
extern void* global_err_data; |
extern void* global_err_data; |
|
|
|
extern int new_galois_format; |
|
|
#define MAXITERPOL 10 /* max #of prec increase in polredabs-type operations */ |
#define MAXITERPOL 10 /* max #of prec increase in polredabs-type operations */ |
|
|
/* let SL = sizeof(long) */ |
/* let SL = sizeof(long) */ |
Line 242 extern void* global_err_data; |
|
Line 278 extern void* global_err_data; |
|
|
|
#define leading_term(x) ((GEN)(((GEN)(x))[lgef(x)-1])) |
#define leading_term(x) ((GEN)(((GEN)(x))[lgef(x)-1])) |
#define constant_term(x) (signe(x)? ((GEN)(((GEN)(x))[2])): gzero) |
#define constant_term(x) (signe(x)? ((GEN)(((GEN)(x))[2])): gzero) |
#define degpol(a) (lgef(a)-3) |
#define degpol(a) ((long)lgef(a)-3) |
#define evaldeg(d) (evallgef(d+3)) |
#define evaldeg(d) (evallgef(d+3)) |
|
|
#define odd(x) ((x) & 1) |
#define odd(x) ((x) & 1) |
Line 250 extern void* global_err_data; |
|
Line 286 extern void* global_err_data; |
|
|
|
#define ONLY_REM ((GEN*)0x1L) |
#define ONLY_REM ((GEN*)0x1L) |
#define ONLY_DIVIDES ((GEN*)0x2L) |
#define ONLY_DIVIDES ((GEN*)0x2L) |
#define ONLY_DIVIDES_EXACT ((GEN*)0x3L) |
|
#define gdeuc(x,y) (poldivres((x),(y),NULL)) |
#define gdeuc(x,y) (poldivres((x),(y),NULL)) |
#define gres(x,y) (poldivres((x),(y),ONLY_REM)) |
#define gres(x,y) (poldivres((x),(y),ONLY_REM)) |
#define FpX_div(x,y,p) (FpX_divres((x),(y),(p), NULL)) |
#define FpX_div(x,y,p) (FpX_divres((x),(y),(p), NULL)) |
Line 278 extern void* global_err_data; |
|
Line 313 extern void* global_err_data; |
|
#define element_mulmodideal(nf,x,y,ideal) (\ |
#define element_mulmodideal(nf,x,y,ideal) (\ |
nfreducemodideal((nf),element_mul((nf),(x),(y)),(ideal))\ |
nfreducemodideal((nf),element_mul((nf),(x),(y)),(ideal))\ |
) |
) |
#define element_mulmodpr(nf,x,y,prhall) (\ |
|
nfreducemodpr((nf),element_mul((nf),(x),(y)),(prhall))\ |
|
) |
|
#define element_sqrmodideal(nf,x,ideal) (\ |
#define element_sqrmodideal(nf,x,ideal) (\ |
nfreducemodideal((nf),element_sqr((nf),(x)),(ideal))\ |
nfreducemodideal((nf),element_sqr((nf),(x)),(ideal))\ |
) |
) |
#define element_sqrmodpr(nf,x,prhall) (\ |
|
nfreducemodpr((nf),element_sqr((nf),(x)),(prhall))\ |
|
) |
|
#define buchgen(P,gcbach,gcbach2,prec) (\ |
|
buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,0,(prec))\ |
|
) |
|
#define buchgenfu(P,gcbach,gcbach2,prec) (\ |
|
buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,2,(prec))\ |
|
) |
|
#define buchinit(P,gcbach,gcbach2,prec) (\ |
|
buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,-1,(prec))\ |
|
) |
|
#define buchinitfu(P,gcbach,gcbach2,prec) (\ |
|
buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,-2,(prec))\ |
|
) |
|
|
|
/* output of get_nf and get_bnf */ |
/* output of get_nf and get_bnf */ |
#define typ_NULL 0 |
#define typ_NULL 0 |
Line 316 extern void* global_err_data; |
|
Line 333 extern void* global_err_data; |
|
#define cmp_LEX 2 |
#define cmp_LEX 2 |
#define cmp_REV 4 |
#define cmp_REV 4 |
#define cmp_C 8 |
#define cmp_C 8 |
|
|
|
#define DIFFPTR_SKIP 255 /* Skip these entries */ |
|
#define NEXT_PRIME_VIADIFF(p,d) \ |
|
{ while (*(d) == DIFFPTR_SKIP) (p) += *(d)++; (p) += *(d)++; } |
|
#define NEXT_PRIME_VIADIFF_CHECK(p,d) \ |
|
{ if (!*(d)) err(primer1); NEXT_PRIME_VIADIFF(p,d) } |