source: git/polys/longtrans.h @ 5c39a9

spielwiese
Last change on this file since 5c39a9 was aff5ae, checked in by Hans Schoenemann <hannes@…>, 14 years ago
nInitChar and related stuff
  • Property mode set to 100644
File size: 7.4 KB
Line 
1#ifndef LONGTRANS_H
2#define LONGTRANS_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: longtrans.h 12469 2011-02-25 13:38:49Z seelisch $ */
7/*
8* ABSTRACT:   numbers in transcendental field extensions,
9              i.e., in rational function fields
10*/
11#include <kernel/structs.h>
12#include <kernel/longalg.h>
13#if 0
14#include <kernel/longrat.h>
15#include <kernel/polys-impl.h>
16
17/*
18   IMPORTANT INFORMATION:
19   Instantiation of an algebraic field extension in SINGULAR
20   works by first creating a transcendental field extension
21   and then providing a minimal polynomial / minimal ideal.
22   Consequently, first the code for transcendental field
23   extensions will be activated; see longtrans.*.
24   When providing a minimal polynomial / minimal ideal, all
25   function pointers will be re-defined, using the below method
26   redefineFunctionPointers(). After that, the code for algebraic
27   field extensions is active; see longalg.*.
28   
29   NOTE:
30   Elements of algebraic and transcendental field extensions
31   are polynomials or quotients of two polynomials, respectively.
32   All these polynomials, as well as the minimal polynomial (in
33   the case of an algebraic extension) live in the globally
34   accessible ring 'nacRing', defined in longtrans.*.
35   
36   METHOD NAMING CONVENTIONS
37   (not true for types / structs / global variables):
38   nap*   macros and methods operating on polynomials living in
39          nacRing (defined in longtrans.*),
40   na*    (but not nap*) methods and macros for algebraic field
41          extensions (defined in longalg.*),
42   nt*    methods and macros for transcendental field extensions,
43          (defined in longtrans.*)
44   nac*   function pointers for computing with the coefficients of
45          polynomials living in nacRing (defined in longtrans.*)
46*/
47
48typedef polyrec * napoly;
49struct slnumber;
50typedef struct slnumber * lnumber;
51struct slnumber
52{
53  napoly z;
54  napoly n;
55  BOOLEAN s;
56};
57
58extern int  ntNumbOfPar;
59#define     ntParNames (currRing->parameter)
60extern int  ntIsChar0;                                  /* == 1 iff char = 0,
61                                                           == 0 otherwise */
62extern ring ntMapRing;
63extern int  ntParsToCopy;
64
65/* specific methods / macros for transcendental field extensions */
66void        ntSetChar(int p, ring r);
67void        ntDelete (number *p, const ring r);
68number      ntInit(int i, const ring r);                /* z := i      */
69number      ntPar(int i);                               /* z := par(i) */
70int         ntParDeg(number n);                         /* i := deg(n) */
71int         ntSize(number n);                           /* size desc.  */
72int         ntInt(number &n, const ring r);
73BOOLEAN     ntIsZero(number za);                        /* za = 0 ?    */
74BOOLEAN     ntIsOne(number  za);                        /* za = 1 ?    */
75BOOLEAN     ntIsMOne(number  za);                       /* za = -1 ?   */
76BOOLEAN     ntEqual(number a, number b);                /* a = b ?     */
77BOOLEAN     ntGreater(number a, number b);              /* dummy       */
78number      ntNeg(number za);                           /* za := - za  */
79number      ntInvers(number a);
80void        ntPower(number x, int exp, number *lo);
81BOOLEAN     ntGreaterZero(number a);
82number      ntCopy(number p);                           /* erg:= p     */
83number      nt_Copy(number p, const ring r);            /* erg:= p     */
84number      ntAdd(number la, number li);                /* lu := la+li */
85number      ntMult(number la, number li);               /* lo := la*li */
86number      ntDiv(number la, number li);                /* lo := la/li */
87number      ntIntDiv(number la, number li);             /* lo := la/li */
88//number      ntIntMod(number la, number li);           /* lo := la/li */
89number      ntSub(number la, number li);                /* lu := la-li */
90void        ntNormalize(number &p);
91number      ntGcd(number a, number b, const ring r);
92number      ntLcm(number a, number b, const ring r);
93const char* ntRead(const char * s, number * p);
94void        ntWrite(number &p, const ring r);
95char*       ntName(number n);
96nMapFunc    ntSetMap(const ring src, const ring dst);
97number      ntMap0P(number c);
98number      ntMap00(number c);
99#ifdef LDEBUG
100BOOLEAN     ntDBTest(number a, const char *f,const int l);
101#endif
102napoly      ntRemainder(napoly f, const napoly  g);
103void        ntSetIdeal(ideal I);
104void        ntCoefNormalize(number pp);
105extern number (*ntMap)(number from);
106
107/* procedure variables for computing with the coefficients of
108   polynomials living in nacRing */
109extern ring        nacRing;
110extern numberfunc  nacMult, nacSub, nacAdd, nacDiv, nacIntDiv;
111extern number      (*nacGcd)(number a, number b, const ring r);
112extern number      (*nacLcm)(number a, number b, const ring r);
113extern number      (*nacInit)(int i, const ring r);
114extern int         (*nacInt)(number &n, const ring r);
115extern void        (*nacNormalize)(number &a);
116extern number      (*nacNeg)(number a);
117extern number      (*nacCopy)(number a);
118extern number      (*nacInvers)(number a);
119extern BOOLEAN     (*nacIsZero)(number a);
120extern BOOLEAN     (*nacIsOne)(number a);
121extern BOOLEAN     (*nacGreaterZero)(number a);
122extern BOOLEAN     (*nacGreater)(number a, number b);
123extern number      (*nacMap)(number);
124
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);
170
171#endif
172#endif
173
Note: See TracBrowser for help on using the repository browser.