source: git/kernel/longtrans.h @ 0c2088

Last change on this file since 0c2088 was 0c2088, checked in by Hans Schoenemann <hannes@…>, 12 years ago
nacIsMOne removed git-svn-id: file:///usr/local/Singular/svn/trunk@13963 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 7.3 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 number      (*nacMap)(number);
122/* for computing with polynomials living in nacRing */
123poly    napPermNumber(number z, int * par_perm, int P, ring r);
124#define napAddExp(p,i,e)       (p_AddExp(p,i,e,currRing->algring))
125#define napLength(p)           pLength(p)
126#define napNeg(p)              (p_Neg(p,currRing->algring))
127#define napVariables           naNumbOfPar
128#define napGetCoeff(p)         pGetCoeff(p)
129#define napGetExpFrom(p,i,r)   (p_GetExp(p,i,r->algring))
130#define napSetExp(p,i,e)       (p_SetExp(p,i,e,currRing->algring))
131#define napNew()               (p_Init(currRing->algring))
132#define napAdd(p1,p2)          (p_Add_q(p1,p2,currRing->algring))
133#define napSetm(p)             p_Setm(p,currRing->algring)
134#define napCopy(p)             p_Copy(p,nacRing)
135#define napSetCoeff(p,n)       {n_Delete(&pGetCoeff(p),nacRing);pGetCoeff(p)=n;}
136#define napComp(p,q)           p_LmCmp((poly)p,(poly)q, nacRing)
137#define napMultT(A,E)          A=(napoly)p_Mult_mm((poly)A,(poly)E,nacRing)
138#define napDeg(p)              (int)p_Totaldegree(p, nacRing)
139number  napGetDenom(number &n, const ring r);
140number  napGetNumerator(number &n, const ring r);
141void    napTest(napoly p);
142napoly  napInitz(number z);
143napoly  napCopyNeg(const napoly p);
144void    napMultN(napoly p, const number z);
145void    napDivMod(napoly f, const napoly g, napoly *q, napoly *r);
146napoly  napRemainder(napoly f, const napoly g);
147napoly  napInvers(napoly x, const napoly c);
148int     napMaxDeg(napoly p);
149int     napMaxDegLen(napoly p, int &l);
150void    napWrite(napoly p,const BOOLEAN has_denom, const ring r);
151int     napExp(napoly a, napoly b);
152int     napExpi(int i, napoly a, napoly b);
153void    napContent(napoly ph);
154void    napCleardenom(napoly ph);
155napoly  napGcd0(napoly a, napoly b);
156napoly  napGcd(napoly a, napoly b);
157number  napLcm(napoly a);
158BOOLEAN napDivPoly (napoly p, napoly q);
159napoly  napRedp (napoly q);
160napoly  napTailred (napoly q);
161napoly  napMap(napoly p);
162napoly  napPerm(napoly p, const int *par_perm, const ring src_ring,
163                const nMapFunc nMap);
164const char* napHandleMons(const char *s, int i, napoly ex);
165const char* napHandlePars(const char *s, int i, napoly ex);
166const char* napRead(const char *s, napoly *b);
Note: See TracBrowser for help on using the repository browser.