source: git/kernel/longtrans.h @ 528f5b7

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