[BACK]Return to paricom.h CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari / src / headers

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>