source: git/Singular/numbers.cc @ d2b2a7

spielwiese
Last change on this file since d2b2a7 was 1fc83c0, checked in by Hans Schönemann <hannes@…>, 27 years ago
* hannes: added nExactDiv to numbers (numbers.*, longrat.*) corrected open bug in sing_dbm.cc (could only "r") simplified sing_dbm.cc (many tests already in silink.cc) (sing_dbm.cc, silink.h) added "mod" (as an alias to "%") (iparith.cc) updated singular.doc: div/mod, DBM: links ANSI-conversion in ndbm.cc (added return types, include files) git-svn-id: file:///usr/local/Singular/svn/trunk@614 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 7.3 KB
Line 
1/*****************************************
2*  Computer Algebra System SINGULAR      *
3*****************************************/
4/* $Id: numbers.cc,v 1.7 1997-08-12 17:14:42 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, nExactDiv;
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      nExactDiv= naDiv;
129      nIntDiv= naIntDiv;
130      nIntMod= npIntMod; /* dummy !! */
131      nNeg   = naNeg;
132      nInvers= naInvers;
133      nCopy  = naCopy;
134      nGreater = naGreater;
135      nEqual = naEqual;
136      nIsZero = naIsZero;
137      nIsOne = naIsOne;
138      nIsMOne = naIsMOne;
139      nGreaterZero = naGreaterZero;
140      nWrite = naWrite;
141      nRead = naRead;
142      nPower = naPower;
143      nGcd  = naGcd;
144      nLcm  = naLcm;
145      nSetMap = naSetMap;
146      nName= naName;
147      nSize  = naParDeg;
148#ifdef LDEBUG
149      nDBTest=naDBTest;
150#endif
151    }
152  }
153  else
154  if (c == 0)
155  {
156#ifdef LDEBUG
157    nDBDelete= nlDBDelete;
158#else
159    nDelete= nlDelete;
160#endif
161    if (complete)
162    {
163      test |= Sy_bit(OPT_INTSTRATEGY); /*26*/
164      nNew   = nlNew;
165      nNormalize=nlNormalize;
166      nInit  = nlInit;
167      nInt   = nlInt;
168      nAdd   = nlAdd;
169      nSub   = nlSub;
170      nMult  = nlMult;
171      nDiv   = nlDiv;
172      nExactDiv= nlExactDiv;
173      nIntDiv= nlIntDiv;
174      nIntMod= nlIntMod;
175      nNeg   = nlNeg;
176      nInvers= nlInvers;
177      nCopy  = nlCopy;
178      nGreater = nlGreater;
179      nEqual = nlEqual;
180      nIsZero = nlIsZero;
181      nIsOne = nlIsOne;
182      nIsMOne = nlIsMOne;
183      nGreaterZero = nlGreaterZero;
184      nWrite = nlWrite;
185      nRead = nlRead;
186      nPower = nlPower;
187      nGcd  = nlGcd;
188      nLcm  = nlLcm;
189      nSetMap = nlSetMap;
190      nName= ndName;
191      nSize  = nlSize;
192#ifdef LDEBUG
193      nDBTest=nlDBTest;
194#endif
195    }
196  }
197  else if ((c>1)&&(param==NULL))
198  /*----------------------char. p----------------*/
199  {
200#ifdef LDEBUG
201    nDBDelete= nDBDummy1;
202#else
203    nDelete= nDummy1;
204#endif
205    if (complete)
206    {
207      npSetChar(c);
208      test &= ~Sy_bit(OPT_INTSTRATEGY); /*26*/
209      nNew   = nDummy1;
210      nNormalize=nDummy2;
211      nInit  = npInit;
212      nInt   = npInt;
213      nAdd   = npAdd;
214      nSub   = npSub;
215      nMult  = npMult;
216      nDiv   = npDiv;
217      nExactDiv= npDiv;
218      nIntDiv= npDiv;
219      nIntMod= npIntMod;
220      nNeg   = npNeg;
221      nInvers= npInvers;
222      nCopy  = npCopy;
223      nGreater = npGreater;
224      nEqual = npEqual;
225      nIsZero = npIsZero;
226      nIsOne = npIsOne;
227      nIsMOne = npIsMOne;
228      nGreaterZero = npGreaterZero;
229      nWrite = npWrite;
230      nRead = npRead;
231      nPower = npPower;
232      nGcd  = ndGcd;
233      nLcm  = ndGcd; /* tricky, isn't it ?*/
234      nSetMap = npSetMap;
235      nName= ndName;
236      /*nSize  = ndSize;*/
237#ifdef LDEBUG
238      nDBTest=npDBTest;
239#endif
240    }
241  }
242  else
243  if (c>1)
244  {
245#ifdef LDEBUG
246    nDBDelete= nDBDummy1;
247#else
248    nDelete= nDummy1;
249#endif
250    if (complete)
251    {
252      test &= ~Sy_bit(OPT_INTSTRATEGY); /*26*/
253      nfSetChar(c,param);
254      nNew   = nDummy1;
255      nNormalize=nDummy2;
256      nInit  = nfInit;
257      nPar   = nfPar;
258      nParDeg= nfParDeg;
259      nInt   = nfInt;
260      nAdd   = nfAdd;
261      nSub   = nfSub;
262      nMult  = nfMult;
263      nDiv   = nfDiv;
264      nExactDiv= nfDiv;
265      nIntDiv= nfDiv;
266      nIntMod= nfIntMod;
267      nNeg   = nfNeg;
268      nInvers= nfInvers;
269      nCopy  = nfCopy;
270      nGreater = nfGreater;
271      nEqual = nfEqual;
272      nIsZero = nfIsZero;
273      nIsOne = nfIsOne;
274      nIsMOne = nfIsMOne;
275      nGreaterZero = nfGreaterZero;
276      nWrite = nfWrite;
277      nRead = nfRead;
278      nPower = nfPower;
279      nGcd  = ndGcd;
280      nLcm  = ndGcd; /* tricky, isn't it ?*/
281      nSetMap = nfSetMap;
282      nName= nfName;
283      /*nSize  = ndSize;*/
284#ifdef LDEBUG
285      nDBTest=nfDBTest;
286#endif
287    }
288  }
289  else
290  //if (c==(-1)) // the rest...
291  {
292#ifdef LDEBUG
293    nDBDelete= nDBDummy1;
294#else
295    nDelete= nDummy1;
296#endif
297    if (complete)
298    {
299      nNew=nDummy1;
300      nNormalize=nDummy2;
301      nInit  = nrInit;
302      nInt   = nrInt;
303      nAdd   = nrAdd;
304      nSub   = nrSub;
305      nMult  = nrMult;
306      nDiv   = nrDiv;
307      nExactDiv= nrDiv;
308      nIntDiv= nrDiv;
309      nIntMod= nrIntMod;
310      nNeg   = nrNeg;
311      nInvers= nrInvers;
312      nCopy  = nrCopy;
313      nGreater = nrGreater;
314      nEqual = nrEqual;
315      nIsZero = nrIsZero;
316      nIsOne = nrIsOne;
317      nIsMOne = nrIsMOne;
318      nGreaterZero = nrGreaterZero;
319      nWrite = nrWrite;
320      nRead = nrRead;
321      nPower = nrPower;
322      nGcd  = ndGcd;
323      nLcm  = ndGcd; /* tricky, isn't it ?*/
324      nSetMap=nrSetMap;
325      nName=ndName;
326      /*nSize  = ndSize;*/
327#ifdef LDEBUG
328      nDBTest=nrDBTest;
329#endif
330    }
331  }
332  if (complete&&(!errorreported)) nNULL=nInit(0);
333}
334
Note: See TracBrowser for help on using the repository browser.