source: git/kernel/longtrans.h @ cdec33

Last change on this file since cdec33 was cdec33, checked in by Frank Seelisch <seelisch@…>, 12 years ago
fix for ticket #329 git-svn-id: file:///usr/local/Singular/svn/trunk@14114 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 7.4 KB
1#ifndef LONGTRANS_H
2#define LONGTRANS_H
4*  Computer Algebra System SINGULAR     *
6/* $Id: longtrans.h 12469 2011-02-25 13:38:49Z seelisch $ */
8* ABSTRACT:   numbers in transcendental field extensions,
9              i.e., in rational function fields
11#include <kernel/structs.h>
12#include <kernel/longrat.h>
13#include <kernel/polys-impl.h>
17   Instantiation of an algebraic field extension in SINGULAR
18   works by first creating a transcendental field extension
19   and then providing a minimal polynomial / minimal ideal.
20   Consequently, first the code for transcendental field
21   extensions will be activated; see longtrans.*.
22   When providing a minimal polynomial / minimal ideal, all
23   function pointers will be re-defined, using the below method
24   redefineFunctionPointers(). After that, the code for algebraic
25   field extensions is active; see longalg.*.
27   NOTE:
28   Elements of algebraic and transcendental field extensions
29   are polynomials or quotients of two polynomials, respectively.
30   All these polynomials, as well as the minimal polynomial (in
31   the case of an algebraic extension) live in the globally
32   accessible ring 'nacRing', defined in longtrans.*.
35   (not true for types / structs / global variables):
36   nap*   macros and methods operating on polynomials living in
37          nacRing (defined in longtrans.*),
38   na*    (but not nap*) methods and macros for algebraic field
39          extensions (defined in longalg.*),
40   nt*    methods and macros for transcendental field extensions,
41          (defined in longtrans.*)
42   nac*   function pointers for computing with the coefficients of
43          polynomials living in nacRing (defined in longtrans.*)
46typedef polyrec * napoly;
47struct slnumber;
48typedef struct slnumber * lnumber;
49struct slnumber
51  napoly z;
52  napoly n;
53  BOOLEAN s;
56extern int  ntNumbOfPar;
57#define     ntParNames (currRing->parameter)
58extern int  ntIsChar0;                                  /* == 1 iff char = 0,
59                                                           == 0 otherwise */ 
60extern ring ntMapRing;
61extern int  ntParsToCopy;
63/* specific methods / macros for transcendental field extensions */
64void        ntSetChar(int p, ring r);
65void        ntDelete (number *p, const ring r);
66number      ntInit(int i, const ring r);                /* z := i      */
67number      ntPar(int i);                               /* z := par(i) */
68int         ntParDeg(number n);                         /* i := deg(n) */
69int         ntSize(number n);                           /* size desc.  */
70int         ntInt(number &n, const ring r);
71BOOLEAN     ntIsZero(number za);                        /* za = 0 ?    */
72BOOLEAN     ntIsOne(number  za);                        /* za = 1 ?    */
73BOOLEAN     ntIsMOne(number  za);                       /* za = -1 ?   */
74BOOLEAN     ntEqual(number a, number b);                /* a = b ?     */
75BOOLEAN     ntGreater(number a, number b);              /* dummy       */
76number      ntNeg(number za);                           /* za := - za  */
77number      ntInvers(number a);
78void        ntPower(number x, int exp, number *lo);
79BOOLEAN     ntGreaterZero(number a);
80number      ntCopy(number p);                           /* erg:= p     */
81number      nt_Copy(number p, const ring r);            /* erg:= p     */
82number      ntAdd(number la, number li);                /* lu := la+li */
83number      ntMult(number la, number li);               /* lo := la*li */
84number      ntDiv(number la, number li);                /* lo := la/li */
85number      ntIntDiv(number la, number li);             /* lo := la/li */
86//number      ntIntMod(number la, number li);           /* lo := la/li */
87number      ntSub(number la, number li);                /* lu := la-li */
88void        ntNormalize(number &p);
89number      ntGcd(number a, number b, const ring r);
90number      ntLcm(number a, number b, const ring r);
91const char* ntRead(const char * s, number * p);
92void        ntWrite(number &p, const ring r);
93char*       ntName(number n);
94nMapFunc    ntSetMap(const ring src, const ring dst);
95number      ntMap0P(number c);
96number      ntMap00(number c);
97#ifdef LDEBUG
98BOOLEAN     ntDBTest(number a, const char *f,const int l);
100napoly      ntRemainder(napoly f, const napoly  g);
101void        ntSetIdeal(ideal I);
102void        ntCoefNormalize(number pp);
103extern number (*ntMap)(number from);
105/* procedure variables for computing with the coefficients of
106   polynomials living in nacRing */
107extern ring        nacRing;
108extern numberfunc  nacMult, nacSub, nacAdd, nacDiv, nacIntDiv;
109extern number      (*nacGcd)(number a, number b, const ring r);
110extern number      (*nacLcm)(number a, number b, const ring r);
111extern number      (*nacInit)(int i, const ring r);
112extern int         (*nacInt)(number &n, const ring r);
113extern void        (*nacNormalize)(number &a);
114extern number      (*nacNeg)(number a);
115extern number      (*nacCopy)(number a);
116extern number      (*nacInvers)(number a);
117extern BOOLEAN     (*nacIsZero)(number a);
118extern BOOLEAN     (*nacIsOne)(number a);
119extern BOOLEAN     (*nacGreaterZero)(number a);
120extern BOOLEAN     (*nacGreater)(number a, number b);
121extern number      (*nacMap)(number);
123/* for computing with polynomials living in nacRing */
124poly    napPermNumber(number z, int * par_perm, int P, ring r);
125#define napAddExp(p,i,e)       (p_AddExp(p,i,e,currRing->algring))
126#define napLength(p)           pLength(p)
127#define napNeg(p)              (p_Neg(p,currRing->algring))
128#define napVariables           naNumbOfPar
129#define napGetCoeff(p)         pGetCoeff(p)
130#define napGetExpFrom(p,i,r)   (p_GetExp(p,i,r->algring))
131#define napSetExp(p,i,e)       (p_SetExp(p,i,e,currRing->algring))
132#define napNew()               (p_Init(currRing->algring))
133#define napAdd(p1,p2)          (p_Add_q(p1,p2,currRing->algring))
134#define napSetm(p)             p_Setm(p,currRing->algring)
135#define napCopy(p)             p_Copy(p,nacRing)
136#define napSetCoeff(p,n)       {n_Delete(&pGetCoeff(p),nacRing);pGetCoeff(p)=n;}
137#define napComp(p,q)           p_LmCmp((poly)p,(poly)q, nacRing)
138#define napMultT(A,E)          A=(napoly)p_Mult_mm((poly)A,(poly)E,nacRing)
139#define napDeg(p)              (int)p_Totaldegree(p, nacRing)
140number  napGetDenom(number &n, const ring r);
141number  napGetNumerator(number &n, const ring r);
142void    napTest(napoly p);
143napoly  napInitz(number z);
144napoly  napCopyNeg(const napoly p);
145void    napMultN(napoly p, const number z);
146void    napDivMod(napoly f, const napoly g, napoly *q, napoly *r);
147napoly  napRemainder(napoly f, const napoly g);
148napoly  napInvers(napoly x, const napoly c);
149int     napMaxDeg(napoly p);
150int     napMaxDegLen(napoly p, int &l);
151void    napWrite(napoly p,const BOOLEAN has_denom, const ring r);
152int     napExp(napoly a, napoly b);
153int     napExpi(int i, napoly a, napoly b);
154void    napContent(napoly ph);
155void    napCleardenom(napoly ph);
156napoly  napGcd0(napoly a, napoly b);
157napoly  napGcd(napoly a, napoly b);
158number  napLcm(napoly a);
159BOOLEAN napDivPoly (napoly p, napoly q);
160napoly  napRedp (napoly q);
161napoly  napTailred (napoly q);
162napoly  napMap(napoly p);
163napoly  napPerm(napoly p, const int *par_perm, const ring src_ring,
164                const nMapFunc nMap);
165const char* napHandleMons(const char *s, int i, napoly ex);
166const char* napHandlePars(const char *s, int i, napoly ex);
167const char* napRead(const char *s, napoly *b);
Note: See TracBrowser for help on using the repository browser.