source: git/kernel/longtrans.h @ d0450f

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