1 | #ifndef LONGALG_H |
---|
2 | #define LONGALG_H |
---|
3 | /**************************************** |
---|
4 | * Computer Algebra System SINGULAR * |
---|
5 | ****************************************/ |
---|
6 | /* $Id: longalg.h 12749 2010-04-27 14:17:56Z hannes $ */ |
---|
7 | /* |
---|
8 | * ABSTRACT: algebraic numbers |
---|
9 | */ |
---|
10 | #include <kernel/structs.h> |
---|
11 | #include <kernel/longrat.h> |
---|
12 | #include <kernel/polys-impl.h> |
---|
13 | #include <kernel/longtrans.h> |
---|
14 | |
---|
15 | /* |
---|
16 | IMPORTANT INFORMATION: |
---|
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.*. |
---|
26 | |
---|
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.*. |
---|
33 | |
---|
34 | METHOD NAMING CONVENTIONS |
---|
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.*) |
---|
44 | */ |
---|
45 | |
---|
46 | struct snaIdeal |
---|
47 | { |
---|
48 | int anz; |
---|
49 | napoly *liste; |
---|
50 | }; |
---|
51 | typedef struct snaIdeal * naIdeal; |
---|
52 | extern omBin snaIdeal_bin; |
---|
53 | extern naIdeal naI; |
---|
54 | extern napoly naMinimalPoly; |
---|
55 | |
---|
56 | /* for re-defining function pointers when switching from |
---|
57 | transcendental to algebraic extension (by providing |
---|
58 | a minpoly) */ |
---|
59 | void redefineFunctionPointers(); |
---|
60 | |
---|
61 | /* specific methods / macros for algebraic field extensions */ |
---|
62 | void naSetChar(int p, ring r); |
---|
63 | void naDelete (number *p, const ring r); |
---|
64 | number naInit(int i, const ring r); /* z := i */ |
---|
65 | number naPar(int i); /* z := par(i) */ |
---|
66 | int naParDeg(number n); /* i := deg(n) */ |
---|
67 | int naSize(number n); /* size desc. */ |
---|
68 | int naInt(number &n, const ring r); |
---|
69 | BOOLEAN naIsZero(number za); /* za = 0 ? */ |
---|
70 | BOOLEAN naIsOne(number za); /* za = 1 ? */ |
---|
71 | BOOLEAN naIsMOne(number za); /* za = -1 ? */ |
---|
72 | BOOLEAN naEqual(number a, number b); /* a = b ? */ |
---|
73 | BOOLEAN naGreater(number a, number b); /* dummy */ |
---|
74 | number naNeg(number za); /* za := - za */ |
---|
75 | number naInvers(number a); |
---|
76 | void naPower(number x, int exp, number *lo); |
---|
77 | BOOLEAN naGreaterZero(number a); |
---|
78 | number naCopy(number p); /* erg:= p */ |
---|
79 | number na_Copy(number p, const ring r); /* erg:= p */ |
---|
80 | number naAdd(number la, number li); /* lu := la+li */ |
---|
81 | number naMult(number la, number li); /* lo := la*li */ |
---|
82 | number naDiv(number la, number li); /* lo := la/li */ |
---|
83 | number naIntDiv(number la, number li); /* lo := la/li */ |
---|
84 | //number naIntMod(number la, number li); /* lo := la/li */ |
---|
85 | number naSub(number la, number li); /* lu := la-li */ |
---|
86 | void naNormalize(number &p); |
---|
87 | number naGcd(number a, number b, const ring r); |
---|
88 | number naLcm(number a, number b, const ring r); |
---|
89 | const char * naRead(const char * s, number * p); |
---|
90 | void naWrite(number &p, const ring r); |
---|
91 | char * naName(number n); |
---|
92 | nMapFunc naSetMap(const ring src, const ring dst); |
---|
93 | number naMap0P(number c); |
---|
94 | number naMap00(number c); |
---|
95 | #ifdef LDEBUG |
---|
96 | BOOLEAN naDBTest(number a, const char *f,const int l); |
---|
97 | #endif |
---|
98 | void naSetIdeal(ideal I); |
---|
99 | void naCoefNormalize(number pp); |
---|
100 | extern number (*naMap)(number from); |
---|
101 | |
---|
102 | #endif |
---|
103 | |
---|