Annotation of OpenXM_contrib/pari/src/headers/paricom.h, Revision 1.1.1.1
1.1 maekawa 1: /******************************************************************/
2: /******************************************************************/
3: /* */
4: /* Fichier Include PARI */
5: /* commun a toutes les versions */
6: /* */
7: /******************************************************************/
8: /******************************************************************/
9: /* $Id: paricom.h,v 1.1.1.1 1999/09/16 13:47:44 karim Exp $ */
10:
11: #define bit_accuracy(x) (((x)-2) << TWOPOTBITS_IN_LONG)
12:
13: #define GSTR(x) ((char*) (((GEN) (x)) + 1 ))
14:
15: /* For compatibility with 1.x.x */
16: #define err pari_err /* move to e.g paritr.h ? */
17: #define init pari_init
18: #define gen2str GENtostr
19: #define gpui gpow
20: #define gpuigs gpowgs
21: #define classno3 hclassno
22: #define strtoGEN flisexpr
23:
24: #define rcopy mpcopy
25: #define absr mpabs
26: #define absi mpabs
27: #define negi mpneg
28: #define negr mpneg
29: #define mpnegz(x,y) {long av=avma;mpaff(mpneg(x),y);avma=av;}
30: #define mpabsz(x,y) {long av=avma;mpaff(mpabs(x),y);avma=av;}
31: #define absrz(x,z) mpabsz((x),(z))
32: #define negrz(x,z) mpnegz((x),(z))
33:
34: /* Common global variables: */
35:
36: extern PariOUT *pariOut, *pariErr;
37: extern FILE *pari_outfile, *logfile, *infile, *errfile;
38:
39: extern long DEBUGFILES, DEBUGLEVEL, DEBUGMEM, precdl;
40: extern long *ordvar;
41: extern GEN bernzone,gpi,geuler;
42: extern GEN polvar,*polun,*polx,primetab;
43: extern GEN gun,gdeux,ghalf,gi,gzero;
44:
45: extern const long lontyp[];
46:
47: #define NUMPRTBELT 100 /* taille table de premiers prives */
48: #define MAXITERPOL 10 /* nombre maximum de doublement de precision
49: dans les operations de type polredabs */
50:
51: /* let SL = sizeof(long) */
52: #define pariK (9.632959862*(BYTES_IN_LONG/4)) /* SL*log(2)/log(10) */
53: #define pariK1 (0.103810253/(BYTES_IN_LONG/4)) /* log(10)/(SL*log(2)) */
54: #define pariK2 (1.1239968) /* 1/(1-(log(2)/(2*pi))) */
55: #define pariK4 (17.079468445347/BITS_IN_LONG) /* 2*e*pi/SL */
56: #define LOG2 (0.69314718055994531) /* log(2) */
57: #define L2SL10 (0.301029995663981) /* log(2)/log(10) */
58: #define pariC1 (0.9189385332) /* log(2*pi)/2 */
59: #define pariC2 (22.18070978*(BYTES_IN_LONG/4)) /* SL*log(2) */
60: #define pariC3 (0.0216950598/(BYTES_IN_LONG/4)) /* log((1+sqrt(5))/2)/C2 */
61:
62: #ifndef PI
63: # define PI (3.141592653589)
64: #endif
65:
66: #ifdef LONG_IS_64BIT
67: # define VERYBIGINT (9223372036854775807L) /* 2^63-1 */
68: # define EXP220 (1099511627776L) /* 2^40 */
69: # define BIGINT (2147483647) /* 2^31-1 */
70: #else
71: # define VERYBIGINT (2147483647L) /* 2^31-1 */
72: # define EXP220 (1048576L) /* 2^20 */
73: # define BIGINT (32767) /* 2^15-1 */
74: #endif
75:
76: #ifdef NOEXP2
77: # ifdef __cplusplus
78: inline double exp2(double x) {return exp(x*LOG2);}
79: inline double log2(double x) {return log(x)/LOG2;}
80: # else
81: # define exp2(x) (exp((double)(x)*LOG2))
82: # ifndef __CYGWIN32__
83: # define log2(x) (log((double)(x))/LOG2)
84: # endif
85: # endif
86: #else
87: BEGINEXTERN
88: double exp2(double);
89: double log2(double);
90: ENDEXTERN
91: #endif
92:
93: #ifndef LONG_IS_64BIT
94: # undef labs
95: # define labs(x) abs(x)
96: #endif
97:
98: #ifdef min
99: # undef min
100: #endif
101: #ifdef max
102: # undef max
103: #endif
104: #define min(a,b) ((a)>(b)?(b):(a))
105: #define max(a,b) ((a)>(b)?(a):(b))
106:
107: #define gval(x,v) (ggval((x),polx[v]))
108: #define gvar9(x) ((typ(x)==t_POLMOD)? gvar2(x): gvar(x))
109:
110: #define ggrando(x,n) (grando0((x),(n),1))
111: #define ggrandocp(x,n) (grando0((x),(n),0))
112:
113: #define addis(x,s) (addsi((s),(x)))
114: #define addrs(x,s) (addsr((s),(x)))
115: #define mulis(x,s) (mulsi((s),(x)))
116: #define muliu(x,s) (mului((s),(x)))
117: #define mulri(x,s) (mulir((s),(x)))
118: #define mulrs(x,s) (mulsr((s),(x)))
119: #define gmulgs(y,s) (gmulsg((s),(y)))
120: #define lmulgs(y,s) ((long)gmulsg((s),(y)))
121:
122: #define mpmodz(x,y,z) (modiiz((x),(y),(z)))
123: #define mpresz(x,y,z) (resiiz((x),(y),(z)))
124: #define mpmod(x,y) (modii((x),(y)))
125: #define mpres(x,y) (resii((x),(y)))
126:
127: #define laddgs(y,s) (lopsg2(gadd,(s),(y)))
128: #define laddsg(s,y) (lopsg2(gadd,(s),(y)))
129: #define ldiventgs(y,s) (lopgs2(gdivent,(y),(s)))
130: #define ldiventsg(s,y) (lopsg2(gdivent,(s),(y)))
131: #define ldivsg(s,y) (lopsg2(gdiv,(s),(y)))
132: #define lmaxgs(y,s) (lopgs2(gmax,(y),(s)))
133: #define lmaxsg(s,y) (lopsg2(gmax,(s),(y)))
134: #define lmings(y,s) (lopgs2(gmin,(y),(s)))
135: #define lminsg(s,y) (lopsg2(gmin,(s),(y)))
136: #define lmodgs(y,s) (lopgs2(gmod,(y),(s)))
137: #define lmodsg(s,y) (lopsg2(gmod,(s),(y)))
138: #define lsubgs(y,s) (lopgs2(gsub,(y),(s)))
139: #define lsubsg(s,y) (lopsg2(gsub,(s),(y)))
140:
141: #define mppiz(x) (gop0z(mppi,(x)))
142: #define mpeulerz(x) (gop0z(mpeuler,(x)))
143:
144: #define autz(x,y) (gop1z(mpaut,(x),(y)))
145: #define mpsqrtz(x,y) (gop1z(mpsqrt,(x),(y)))
146: #define mpexpz(x,y) (gop1z(mpexp,(x),(y)))
147: #define mpexp1z(x,y) (gop1z(mpexp1,(x),(y)))
148: #define mplogz(x,y) (gop1z(mplog,(x),(y)))
149: #define mpcosz(x,y) (gop1z(mpcos,(x),(y)))
150: #define mpsinz(x,y) (gop1z(mpsin,(x),(y)))
151: #define mptanz(x,y) (gop1z(mptan,(x),(y)))
152: #define mpatanz(x,y) (gop1z(mpatan,(x),(y)))
153: #define mpasinz(x,y) (gop1z(mpasin,(x),(y)))
154: #define mpacosz(x,y) (gop1z(mpacos,(x),(y)))
155: #define mpchz(x,y) (gop1z(mpch,(x),(y)))
156: #define mpshz(x,y) (gop1z(mpsh,(x),(y)))
157: #define mpthz(x,y) (gop1z(mpth,(x),(y)))
158: #define mpathz(x,y) (gop1z(mpath,(x),(y)))
159: #define mpashz(x,y) (gop1z(mpash,(x),(y)))
160: #define mpachz(x,y) (gop1z(mpach,(x),(y)))
161: #define mpgammaz(x,y) (gop1z(mpgamma,(x),(y)))
162: #define gredz(x,y) (gop1z(gred,(x),(y)))
163: #define gnegz(x,y) (gop1z(gneg,(x),(y)))
164:
165: #define mpargz(x,y,z) (gop2z(mparg,(x),(y),(z)))
166: #define gabsz(x,prec,y) (gop2z(gabs,(x),(prec),(y)))
167: #define gmaxz(x,y,z) (gop2z(gmax,(x),(y),(z)))
168: #define gminz(x,y,z) (gop2z(gmin,(x),(y),(z)))
169: #define gaddz(x,y,z) (gop2z(gadd,(x),(y),(z)))
170: #define gsubz(x,y,z) (gop2z(gsub,(x),(y),(z)))
171: #define gmulz(x,y,z) (gop2z(gmul,(x),(y),(z)))
172: #define gdivz(x,y,z) (gop2z(gdiv,(x),(y),(z)))
173: #define gdiventz(x,y,z) (gop2z(gdivent,(x),(y),(z)))
174: #define gmodz(x,y,z) (gop2z(gmod,(x),(y),(z)))
175:
176: #define gaddgs(y,s) (gopsg2(gadd,(s),(y)))
177: #define gaddsg(s,y) (gopsg2(gadd,(s),(y)))
178: #define gaddsmat(s,y) (gopsg2(gaddmat,(s),(y)))
179: #define gdiventsg(s,y) (gopsg2(gdivent,(s),(y)))
180: #define gdivsg(s,y) (gopsg2(gdiv,(s),(y)))
181: #define gmaxsg(s,y) (gopsg2(gmax,(s),(y)))
182: #define gminsg(s,y) (gopsg2(gmin,(s),(y)))
183: #define gmodsg(s,y) (gopsg2(gmod,(s),(y)))
184: #define gsubsg(s,y) (gopsg2(gsub,(s),(y)))
185:
186: #define gdiventgs(y,s) (gopgs2(gdivent,(y),(s)))
187: #define gmaxgs(y,s) (gopgs2(gmax,(y),(s)))
188: #define gmings(y,s) (gopgs2(gmin,(y),(s)))
189: #define gmodgs(y,s) (gopgs2(gmod,(y),(s)))
190: #define gsubgs(y,s) (gopgs2(gsub,(y),(s)))
191:
192: #define gcmpsg(s,y) (-opgs2(gcmp,(y),(s)))
193: #define gcmpgs(y,s) (opgs2(gcmp,(y),(s)))
194: #define gegalsg(s,y) (opgs2(gegal,(y),(s)))
195: #define gegalgs(y,s) (opgs2(gegal,(y),(s)))
196:
197: #define gaddgsz(y,s,z) (gopsg2z(gadd,(s),(y),(z)))
198: #define gaddsgz(s,y,z) (gopsg2z(gadd,(s),(y),(z)))
199: #define gdiventsgz(s,y,z) (gopsg2z(gdivent,(s),y),(z)))
200: #define gdivsgz(s,y,z) (gopsg2z(gdiv,(s),(y),(z)))
201: #define gmaxsgz(s,y,z) (gopsg2z(gmax,(s),(y),(z)))
202: #define gminsgz(s,y,z) (gopsg2z(gmin,(s),(y),(z)))
203: #define gmodsgz(s,y,z) (gopsg2z(gmod,(s),(y),(z)))
204: #define gsubsgz(s,y,z) (gopsg2z(gsub,(s),(y),(z)))
205:
206: #define gdiventgsz(y,s,z) (gopgs2z(gdivent,(y),(s),(z)))
207: #define gmaxgsz(y,s,z) (gopgs2z(gmax,(y),(s),(z)))
208: #define gmingsz(y,s,z) (gopgs2z(gmin,(y),(s),(z)))
209: #define gmodgsz(y,s,z) (gopgs2z(gmod,(y),(s),(z)))
210: #define gsubgsz(y,s,z) (gopgs2z(gsub,(y),(s),(z)))
211:
212: #define gdivgsz(y,s,z) (gops2gsz(gdivgs,(y),(s),(z)))
213: #define gmul2nz(x,s,z) (gops2gsz(gmul2n,(x),(s),(z)))
214: #define gmulgsz(y,s,z) (gops2sgz(gmulsg,(s),(y),(z)))
215: #define gmulsgz(s,y,z) (gops2sgz(gmulsg,(s),(y),(z)))
216: #define gshiftz(x,s,z) (gops2gsz(gshift,(x),(s),(z)))
217:
218: #define bern(i) (bernzone + 3 + (i)*bernzone[2])
219:
220: /* works only for POSITIVE integers */
221: #define mod64(x) (((x)[lgefint(x)-1]) & 63)
222: #define mod32(x) (((x)[lgefint(x)-1]) & 31)
223: #define mod16(x) (((x)[lgefint(x)-1]) & 15)
224: #define mod8(x) (((x)[lgefint(x)-1]) & 7)
225: #define mod4(x) (((x)[lgefint(x)-1]) & 3)
226: #define mod2(x) (((x)[lgefint(x)-1]) & 1)
227: #define is_pm1(n) ((lgefint(n)==3) && (((GEN)(n))[2]==1))
228: #define is_bigint(n) ((lgefint(n)>3) || \
229: ((lgefint(n)==3) && ((((GEN)(n))[2]) < 0)))
230:
231: #define leading_term(x) ((GEN)(((GEN)(x))[lgef(x)-1]))
232:
233: #ifdef __cplusplus
234: inline int odd(long x) {return x&1;}
235: #else
236: # define odd(x) ((x) & 1)
237: #endif
238:
239: #define mpodd(x) (signe(x) && mod2(x))
240:
241: #define ONLY_REM ((GEN*)0x1)
242: #define ONLY_DIVIDES ((GEN*)0x2)
243: #define ONLY_DIVIDES_EXACT ((GEN*)0x3)
244: #define gdeuc(x,y) (poldivres((x),(y),NULL))
245: #define gres(x,y) (poldivres((x),(y),ONLY_REM))
246: #define Fp_deuc(x,y,p) (Fp_poldivres((x),(y),(p), NULL))
247: #define Fp_res(x,y,p) (Fp_poldivres((x),(y),(p), ONLY_REM))
248: #define matpascal(n) matqpascal((n),NULL)
249: #define sturm(x) (sturmpart((x),NULL,NULL))
250: #define carreparfait(x) (carrecomplet((x),NULL))
251: #define subres(x,y) (subresall((x),(y),NULL))
252: /* #define subres(x,y) (resultantducos((x),(y))) */
253:
254: #define leadingcoeff(x) (pollead((x),-1))
255: #define lift_intern(x) (lift_intern0((x),-1))
256:
257: #define idealmullll(nf,x,y) (idealoplll(idealmul,(nf),(x),(y)))
258: #define idealdivlll(nf,x,y) (idealoplll(idealdiv,(nf),(x),(y)))
259:
260: #define invmat(a) (gauss((a),NULL))
261:
262: #define element_divmodideal(nf,x,y,ideal) (\
263: nfreducemodideal((nf),\
264: element_mul((nf),(x),element_invmodideal((nf),(y),(ideal)))\
265: ,(ideal)\
266: )\
267: )
268: #define element_mulmodideal(nf,x,y,ideal) (\
269: nfreducemodideal((nf),element_mul((nf),(x),(y)),(ideal))\
270: )
271: #define element_mulmodidele(nf,x,y,idele,structarch) (\
272: nfreducemodidele((nf),element_mul((nf),(x),(y)),(idele),(structarch))\
273: )
274: #define element_mulmodpr(nf,x,y,prhall) (\
275: nfreducemodpr((nf),element_mul((nf),(x),(y)),(prhall))\
276: )
277: #define element_sqrmodideal(nf,x,ideal) (\
278: nfreducemodideal((nf),element_sqr((nf),(x)),(ideal))\
279: )
280: #define element_sqrmodidele(nf,x,idele,structarch) (\
281: nfreducemodidele((nf),element_sqr((nf),(x)),(idele),(structarch))\
282: )
283: #define element_sqrmodpr(nf,x,prhall) (\
284: nfreducemodpr((nf),element_sqr((nf),(x)),(prhall))\
285: )
286: #define idealmulmodideal(nf,x,y,ideal,prec) (\
287: ideallllredmodideal((nf),idealmullll((nf),(x),(y)),(ideal),(prec))\
288: )
289: #define idealsqrmodideal(nf,x,ideal,prec) (\
290: ideallllredmodideal((nf),idealsqrlll((nf),(x)),(ideal),(prec))\
291: )
292:
293: #define buchgen(P,gcbach,gcbach2,prec) (\
294: buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,0,(prec))\
295: )
296: #define buchgenfu(P,gcbach,gcbach2,prec) (\
297: buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,2,(prec))\
298: )
299: #define buchinit(P,gcbach,gcbach2,prec) (\
300: buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,-1,(prec))\
301: )
302: #define buchinitfu(P,gcbach,gcbach2,prec) (\
303: buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,-2,(prec))\
304: )
305:
306: /* output of get_nf and get_bnf */
307: #define typ_NULL 0
308: #define typ_POL 1
309: #define typ_Q 2
310: #define typ_NF 3
311: #define typ_BNF 4
312: #define typ_BNR 5
313: #define typ_CLA 6 /* bnfclassunit */
314: #define typ_ELL 7 /* elliptic curve */
315: #define typ_QUA 8 /* quadclassunit */
316:
317: /* for gen_sort */
318: #define cmp_IND 1
319: #define cmp_LEX 2
320: #define cmp_C 4
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>