source: git/Singular/numbers.cc @ 18dd47

spielwiese
Last change on this file since 18dd47 was fb8518f, checked in by Hans Schönemann <hannes@…>, 27 years ago
* hannes: fixed nSize in char p (numbers.cc) git-svn-id: file:///usr/local/Singular/svn/trunk@536 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 7.2 KB
Line 
1/*****************************************
2*  Computer Algebra System SINGULAR      *
3*****************************************/
4/* $Id: numbers.cc,v 1.6 1997-07-17 13:55:48 Singular Exp $ */
5
6/*
7* ABSTRACT: interface to coefficient aritmetics
8*/
9
10#include <string.h>
11#include <stdlib.h>
12#include "mod2.h"
13#include "tok.h"
14#include "febase.h"
15#include "kstd1.h"
16#include "numbers.h"
17#include "longrat.h"
18#include "longalg.h"
19#include "modulop.h"
20#ifndef FAST_AND_DIRTY
21#undef npMultM
22#undef npSubM
23#undef npNegM
24#undef npEqualM
25#endif
26#include "ffields.h"
27#include "shortfl.h"
28
29//static int characteristic = 0;
30extern int IsPrime(int p);
31
32void   (*nNew)(number *a);
33number (*nInit)(int i);
34number (*nPar)(int i);
35int    (*nParDeg)(number n);
36int    (*nSize)(number n);
37int    (*nInt)(number &n);
38numberfunc nMult, nSub, nAdd, nDiv, nIntDiv, nIntMod;
39number (*nNeg)(number a);
40number (*nInvers)(number a);
41void   (*nNormalize)(number &a);
42number (*nCopy)(number a);
43BOOLEAN (*nGreater)(number a,number b);
44BOOLEAN (*nEqual)(number a,number b);
45BOOLEAN (*nIsZero)(number a);
46BOOLEAN (*nIsOne)(number a);
47BOOLEAN (*nIsMOne)(number a);
48BOOLEAN (*nGreaterZero)(number a);
49void   (*nWrite)(number &a);
50char * (*nRead)(char *s,number *a);
51void   (*nPower)(number a, int i, number * result);
52numberfunc nGcd,nLcm;
53BOOLEAN (*nSetMap)(int c,char **par, int nop, number minpol);
54number (*nMap)(number from);
55char * (*nName)(number n);
56#ifdef LDEBUG
57BOOLEAN (*nDBTest)(number a, char *f, int l);
58void (*nDBDelete)(number *a, char *f, int l);
59#else
60void   (*nDelete)(number *a);
61#endif
62
63/*0 implementation*/
64number nNULL; /* the 0 as constant */
65int    nChar;
66
67void   nDummy1(number* d) { *d=NULL; }
68
69#ifdef LDEBUG
70void   nDBDummy1(number* d,char *f, int l) { *d=NULL; }
71#endif
72
73void   nDummy2(number& d) { }
74
75char * ndName(number n) { return NULL; }
76
77number ndPar(int i) { return nInit(0); }
78
79int    ndParDeg(number n) { return 0; }
80
81number ndGcd(number a, number b) { return nInit(1); }
82
83int    nGetChar() { return nChar; }
84
85int ndSize(number a) {return (int)nIsZero(a)==FALSE; }
86
87/*2
88* init operations for characteristic c (complete==TRUE)
89* init nDelete    for characteristic c (complete==FALSE)
90* param: the names of the parameters (read-only)
91*/
92void nSetChar(int c, BOOLEAN complete, char ** param, int pars)
93{
94  if (nNULL!=NULL)
95  {
96    nDelete(&nNULL);nNULL=NULL;
97  }
98  if (complete)
99  {
100    nChar=c;
101    nPar   = ndPar;
102    nParDeg= ndParDeg;
103    nSize  = ndSize;
104  }
105  //Print("n:c=%d compl=%d param=%d\n",c,complete,param);
106  if ((c == 1) || (c< (-1)))
107  {
108    naSetChar(c,complete,param,pars);
109#ifdef LDEBUG
110    nDBDelete= naDBDelete;
111#else
112    nDelete= naDelete;
113#endif
114    if (complete)
115    {
116      test |= Sy_bit(OPT_INTSTRATEGY); /*intStrategy*/
117      test &= ~Sy_bit(OPT_REDTAIL); /*noredTail*/
118      nNew   = naNew;
119      nNormalize=naNormalize;
120      nInit  = naInit;
121      nPar   = naPar;
122      nParDeg= naParDeg;
123      nInt   = naInt;
124      nAdd   = naAdd;
125      nSub   = naSub;
126      nMult  = naMult;
127      nDiv   = naDiv;
128      nIntDiv= naIntDiv;
129      nIntMod= npIntMod; /* dummy !! */
130      nNeg   = naNeg;
131      nInvers= naInvers;
132      nCopy  = naCopy;
133      nGreater = naGreater;
134      nEqual = naEqual;
135      nIsZero = naIsZero;
136      nIsOne = naIsOne;
137      nIsMOne = naIsMOne;
138      nGreaterZero = naGreaterZero;
139      nWrite = naWrite;
140      nRead = naRead;
141      nPower = naPower;
142      nGcd  = naGcd;
143      nLcm  = naLcm;
144      nSetMap = naSetMap;
145      nName= naName;
146      nSize  = naParDeg;
147#ifdef LDEBUG
148      nDBTest=naDBTest;
149#endif
150    }
151  }
152  else
153  if (c == 0)
154  {
155#ifdef LDEBUG
156    nDBDelete= nlDBDelete;
157#else
158    nDelete= nlDelete;
159#endif
160    if (complete)
161    {
162      test |= Sy_bit(OPT_INTSTRATEGY); /*26*/
163      nNew   = nlNew;
164      nNormalize=nlNormalize;
165      nInit  = nlInit;
166      nInt   = nlInt;
167      nAdd   = nlAdd;
168      nSub   = nlSub;
169      nMult  = nlMult;
170      nDiv   = nlDiv;
171      nIntDiv= nlIntDiv;
172      nIntMod= nlIntMod;
173      nNeg   = nlNeg;
174      nInvers= nlInvers;
175      nCopy  = nlCopy;
176      nGreater = nlGreater;
177      nEqual = nlEqual;
178      nIsZero = nlIsZero;
179      nIsOne = nlIsOne;
180      nIsMOne = nlIsMOne;
181      nGreaterZero = nlGreaterZero;
182      nWrite = nlWrite;
183      nRead = nlRead;
184      nPower = nlPower;
185      nGcd  = nlGcd;
186      nLcm  = nlLcm;
187      nSetMap = nlSetMap;
188      nName= ndName;
189      nSize  = nlSize;
190#ifdef LDEBUG
191      nDBTest=nlDBTest;
192#endif
193    }
194  }
195  else if ((c>1)&&(param==NULL))
196  /*----------------------char. p----------------*/
197  {
198#ifdef LDEBUG
199    nDBDelete= nDBDummy1;
200#else
201    nDelete= nDummy1;
202#endif
203    if (complete)
204    {
205      npSetChar(c);
206      test &= ~Sy_bit(OPT_INTSTRATEGY); /*26*/
207      nNew   = nDummy1;
208      nNormalize=nDummy2;
209      nInit  = npInit;
210      nInt   = npInt;
211      nAdd   = npAdd;
212      nSub   = npSub;
213      nMult  = npMult;
214      nDiv   = npDiv;
215      nIntDiv= npDiv;
216      nIntMod= npIntMod;
217      nNeg   = npNeg;
218      nInvers= npInvers;
219      nCopy  = npCopy;
220      nGreater = npGreater;
221      nEqual = npEqual;
222      nIsZero = npIsZero;
223      nIsOne = npIsOne;
224      nIsMOne = npIsMOne;
225      nGreaterZero = npGreaterZero;
226      nWrite = npWrite;
227      nRead = npRead;
228      nPower = npPower;
229      nGcd  = ndGcd;
230      nLcm  = ndGcd; /* tricky, isn't it ?*/
231      nSetMap = npSetMap;
232      nName= ndName;
233      /*nSize  = ndSize;*/
234#ifdef LDEBUG
235      nDBTest=npDBTest;
236#endif
237    }
238  }
239  else
240  if (c>1)
241  {
242#ifdef LDEBUG
243    nDBDelete= nDBDummy1;
244#else
245    nDelete= nDummy1;
246#endif
247    if (complete)
248    {
249      test &= ~Sy_bit(OPT_INTSTRATEGY); /*26*/
250      nfSetChar(c,param);
251      nNew   = nDummy1;
252      nNormalize=nDummy2;
253      nInit  = nfInit;
254      nPar   = nfPar;
255      nParDeg= nfParDeg;
256      nInt   = nfInt;
257      nAdd   = nfAdd;
258      nSub   = nfSub;
259      nMult  = nfMult;
260      nDiv   = nfDiv;
261      nIntDiv= nfDiv;
262      nIntMod= nfIntMod;
263      nNeg   = nfNeg;
264      nInvers= nfInvers;
265      nCopy  = nfCopy;
266      nGreater = nfGreater;
267      nEqual = nfEqual;
268      nIsZero = nfIsZero;
269      nIsOne = nfIsOne;
270      nIsMOne = nfIsMOne;
271      nGreaterZero = nfGreaterZero;
272      nWrite = nfWrite;
273      nRead = nfRead;
274      nPower = nfPower;
275      nGcd  = ndGcd;
276      nLcm  = ndGcd; /* tricky, isn't it ?*/
277      nSetMap = nfSetMap;
278      nName= nfName;
279      /*nSize  = ndSize;*/
280#ifdef LDEBUG
281      nDBTest=nfDBTest;
282#endif
283    }
284  }
285  else
286  //if (c==(-1)) // the rest...
287  {
288#ifdef LDEBUG
289    nDBDelete= nDBDummy1;
290#else
291    nDelete= nDummy1;
292#endif
293    if (complete)
294    {
295      nNew=nDummy1;
296      nNormalize=nDummy2;
297      nInit  = nrInit;
298      nInt   = nrInt;
299      nAdd   = nrAdd;
300      nSub   = nrSub;
301      nMult  = nrMult;
302      nDiv   = nrDiv;
303      nIntDiv= nrDiv;
304      nIntMod= nrIntMod;
305      nNeg   = nrNeg;
306      nInvers= nrInvers;
307      nCopy  = nrCopy;
308      nGreater = nrGreater;
309      nEqual = nrEqual;
310      nIsZero = nrIsZero;
311      nIsOne = nrIsOne;
312      nIsMOne = nrIsMOne;
313      nGreaterZero = nrGreaterZero;
314      nWrite = nrWrite;
315      nRead = nrRead;
316      nPower = nrPower;
317      nGcd  = ndGcd;
318      nLcm  = ndGcd; /* tricky, isn't it ?*/
319      nSetMap=nrSetMap;
320      nName=ndName;
321      /*nSize  = ndSize;*/
322#ifdef LDEBUG
323      nDBTest=nrDBTest;
324#endif
325    }
326  }
327  if (complete&&(!errorreported)) nNULL=nInit(0);
328}
329
Note: See TracBrowser for help on using the repository browser.