Changeset 7d90aa in git
- Timestamp:
- Mar 8, 2011, 7:29:56 PM (12 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
- Children:
- 655a2976d656bc7749e136dea00a5bb75c14a0b4
- Parents:
- 634d93b52f3d7540be44b7c941a206dc38b1b1be
- git-author:
- Oleksandr Motsak <motsak@mathematik.uni-kl.de>2011-03-08 19:29:56+01:00
- git-committer:
- Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2011-11-09 11:49:00+01:00
- Location:
- coeffs
- Files:
-
- 6 added
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
coeffs/ffields.h
r634d93b r7d90aa 8 8 * ABSTRACT: finite fields with a none-prime number of elements (via tables) 9 9 */ 10 #include <kernel/structs.h>10 #include "coeffs.h" 11 11 12 12 13 BOOLEAN nfGreaterZero (number k );14 number nfMult (number a, number b );15 number nfInit (int i, const ringr);16 number nfPar (int i );17 int nfParDeg (number n );18 int nfInt (number &n, const ringr);19 number nfAdd (number a, number b );20 number nfSub (number a, number b );21 void nfPower (number a, int i, number * result );22 BOOLEAN nfIsZero (number a );23 BOOLEAN nfIsOne (number a );24 BOOLEAN nfIsMOne (number a );25 number nfDiv (number a, number b );26 number nfNeg (number c );27 number nfInvers (number c );28 BOOLEAN nfGreater (number a, number b );29 BOOLEAN nfEqual (number a, number b );30 void nfWrite (number &a, const ringr);31 const char * nfRead (const char *s, number *a );13 BOOLEAN nfGreaterZero (number k, const coeffs r); 14 number nfMult (number a, number b, const coeffs r); 15 number nfInit (int i, const coeffs r); 16 number nfPar (int i, const coeffs r); 17 int nfParDeg (number n, const coeffs r); 18 int nfInt (number &n, const coeffs r); 19 number nfAdd (number a, number b, const coeffs r); 20 number nfSub (number a, number b, const coeffs r); 21 void nfPower (number a, int i, number * result, const coeffs r); 22 BOOLEAN nfIsZero (number a, const coeffs r); 23 BOOLEAN nfIsOne (number a, const coeffs r); 24 BOOLEAN nfIsMOne (number a, const coeffs r); 25 number nfDiv (number a, number b, const coeffs r); 26 number nfNeg (number c, const coeffs r); 27 number nfInvers (number c, const coeffs r); 28 BOOLEAN nfGreater (number a, number b, const coeffs r); 29 BOOLEAN nfEqual (number a, number b, const coeffs r); 30 void nfWrite (number &a, const coeffs r); 31 const char * nfRead (const char *s, number *a, const coeffs r); 32 32 #ifdef LDEBUG 33 33 BOOLEAN nfDBTest (number a, const char *f, const int l); … … 35 35 void nfSetChar (int c, char ** param); 36 36 37 nMapFunc nfSetMap (const ring src, const ringdst);38 char * nfName (number n );37 nMapFunc nfSetMap (const coeffs src, const coeffs dst); 38 char * nfName (number n, const coeffs r); 39 39 extern int nfMinPoly[]; 40 40 extern int nfCharP; /* the characteristic: p*/ -
coeffs/gnumpc.cc
r634d93b r7d90aa 9 9 */ 10 10 11 #include <kernel/mod2.h> 12 #include <kernel/structs.h> 13 #include <kernel/febase.h> 14 #include <omalloc/omalloc.h> 15 #include <kernel/numbers.h> 16 #include <kernel/longrat.h> 17 #include <kernel/modulop.h> 18 #include <kernel/gnumpc.h> 19 #include <kernel/gnumpfl.h> 20 #include <kernel/mpr_complex.h> 11 #include "coeffs.h" 12 #include "numbers.h" 13 #include "longrat.h" 14 #include "modulop.h" 15 #include "gnumpc.h" 16 #include "gnumpfl.h" 17 #include "mpr_complex.h" 21 18 22 19 extern size_t gmp_output_digits; … … 71 68 } 72 69 73 nMapFunc ngcSetMap(const ring src,const ringdst)70 nMapFunc ngcSetMap(const coeffs src,const coeffs dst) 74 71 { 75 72 if(rField_is_Q(src)) … … 106 103 * n := i 107 104 */ 108 number ngcInit (int i, const ringr)105 number ngcInit (int i, const coeffs r) 109 106 { 110 107 gmp_complex* n= new gmp_complex( (long)i, (long)0 ); … … 115 112 * convert number to int 116 113 */ 117 int ngcInt(number &i, const ringr)114 int ngcInt(number &i, const coeffs r) 118 115 { 119 116 return (int)((gmp_complex*)i)->real(); … … 138 135 * delete a 139 136 */ 140 void ngcDelete (number * a, const ringr)137 void ngcDelete (number * a, const coeffs r) 141 138 { 142 139 if ( *a != NULL ) … … 155 152 return (number)b; 156 153 } 157 number ngc_Copy(number a, ringr)154 number ngc_Copy(number a, const coeffs r) 158 155 { 159 156 gmp_complex* b=new gmp_complex( *(gmp_complex*)a ); … … 373 370 * write a floating point number 374 371 */ 375 void ngcWrite (number &a, const ringr)372 void ngcWrite (number &a, const coeffs r) 376 373 { 377 374 if (a==NULL) … … 382 379 out= complexToStr(*(gmp_complex*)a,gmp_output_digits); 383 380 StringAppendS(out); 384 // omFreeSize(( ADDRESS)out, (strlen(out)+1)* sizeof(char) );385 omFree( ( ADDRESS)out );381 // omFreeSize((void *)out, (strlen(out)+1)* sizeof(char) ); 382 omFree( (void *)out ); 386 383 } 387 384 } -
coeffs/gnumpc.h
r634d93b r7d90aa 8 8 * ABSTRACT: computations with GMP floating-point numbers 9 9 */ 10 #include <kernel/structs.h>10 #include "coeffs.h" 11 11 12 BOOLEAN ngcGreaterZero(number za); // !!! MAY NOT WORK AS EXPECTED !!! 13 BOOLEAN ngcGreater(number a, number b); 14 BOOLEAN ngcEqual(number a, number b); 15 BOOLEAN ngcIsOne(number a); 16 BOOLEAN ngcIsMOne(number a); 17 BOOLEAN ngcIsZero(number za); 18 number ngcInit(int i, const ring r); 19 int ngcInt(number &n, const ring r); 20 number ngcNeg(number za); 21 number ngcInvers(number a); 22 number ngcPar(int i); 23 number ngcAdd(number la, number li); 24 number ngcSub(number la, number li); 25 number ngcMult(number a, number b); 26 number ngcDiv(number a, number b); 27 int ngcSize(number n); 28 void ngcPower(number x, int exp, number *lu); 12 BOOLEAN ngcGreaterZero(number za, const coeffs r); // !!! MAY NOT WORK AS EXPECTED !!! 13 BOOLEAN ngcGreater(number a, number b, const coeffs r); 14 BOOLEAN ngcEqual(number a, number b, const coeffs r); 15 BOOLEAN ngcIsOne(number a, const coeffs r); 16 BOOLEAN ngcIsMOne(number a, const coeffs r); 17 BOOLEAN ngcIsZero(number za, const coeffs r); 18 number ngcInit(int i, const coeffs r); 19 int ngcInt(number &n, const coeffs r); 20 number ngcNeg(number za, const coeffs r); 21 number ngcInvers(number a, const coeffs r); 22 number ngcPar(int i, const coeffs r); 23 number ngcAdd(number la, number li, const coeffs r); 24 number ngcSub(number la, number li, const coeffs r); 25 number ngcMult(number a, number b, const coeffs r); 26 number ngcDiv(number a, number b, const coeffs r); 27 void ngcPower(number x, int exp, number *lu, const coeffs r); 29 28 number ngcCopy(number a); 30 number ngc_Copy(number a, ringr);31 const char * ngcRead (const char *s, number *a );32 void ngcWrite(number &a, const ringr);33 number ngcRePart(number a );34 number ngcImPart(number a );29 number ngc_Copy(number a, coeffs r); 30 const char * ngcRead (const char *s, number *a, const coeffs r); 31 void ngcWrite(number &a, const coeffs r); 32 number ngcRePart(number a, const coeffs r); 33 number ngcImPart(number a, const coeffs r); 35 34 36 35 … … 38 37 BOOLEAN ngcDBTest(number a, const char *f, const int l); 39 38 #endif 40 void ngcDelete(number *a, const ringr);39 void ngcDelete(number *a, const coeffs r); 41 40 42 nMapFunc ngcSetMap(const ring src, const ringdst);41 nMapFunc ngcSetMap(const coeffs src, const coeffs dst); 43 42 44 number ngcMapQ(number from );43 number ngcMapQ(number from, const coeffs r); 45 44 #endif 46 45 -
coeffs/gnumpfl.cc
r634d93b r7d90aa 382 382 out= floatToStr(*(gmp_float*)a,gmp_output_digits); 383 383 StringAppendS(out); 384 //omFreeSize(( ADDRESS)out, (strlen(out)+1)* sizeof(char) );385 omFree( ( ADDRESS)out );384 //omFreeSize((void *)out, (strlen(out)+1)* sizeof(char) ); 385 omFree( (void *)out ); 386 386 } 387 387 else -
coeffs/gnumpfl.h
r634d93b r7d90aa 8 8 * ABSTRACT: computations with GMP floating-point numbers 9 9 */ 10 #include <kernel/structs.h>10 #include "coeffs.h" 11 11 12 BOOLEAN ngfGreaterZero(number za); 13 BOOLEAN ngfGreater(number a, number b); 14 BOOLEAN ngfEqual(number a, number b); 15 BOOLEAN ngfIsOne(number a); 16 BOOLEAN ngfIsMOne(number a); 17 BOOLEAN ngfIsZero(number za); 18 number ngfInit(int i, const ring r); 19 int ngfInt(number &n, const ring r); 20 number ngfNeg(number za); 21 number ngfInvers(number a); 22 number ngfAdd(number la, number li); 23 number ngfSub(number la, number li); 24 number ngfMult(number a, number b); 25 int ngfSize(number n); 26 number ngfDiv(number a, number b); 27 void ngfPower(number x, int exp, number *lu); 12 BOOLEAN ngfGreaterZero(number za, const coeffs r); 13 BOOLEAN ngfGreater(number a, number b, const coeffs r); 14 BOOLEAN ngfEqual(number a, number b, const coeffs r); 15 BOOLEAN ngfIsOne(number a, const coeffs r); 16 BOOLEAN ngfIsMOne(number a, const coeffs r); 17 BOOLEAN ngfIsZero(number za, const coeffs r); 18 number ngfInit(int i, const coeffs r); 19 int ngfInt(number &n, const coeffs r); 20 number ngfNeg(number za, const coeffs r); 21 number ngfInvers(number a, const coeffs r); 22 number ngfAdd(number la, number li, const coeffs r); 23 number ngfSub(number la, number li, const coeffs r); 24 number ngfMult(number a, number b, const coeffs r); 25 number ngfDiv(number a, number b, const coeffs r); 26 void ngfPower(number x, int exp, number *lu, const coeffs r); 28 27 number ngfCopy(number a); 29 number ngf_Copy(number a, ringr);30 const char * ngfRead (const char *s, number *a );31 void ngfWrite(number &a, const ringr);28 number ngf_Copy(number a, coeffs r); 29 const char * ngfRead (const char *s, number *a, const coeffs r); 30 void ngfWrite(number &a, const coeffs r); 32 31 33 32 #ifdef LDEBUG 34 33 BOOLEAN ngfDBTest(number a, const char *f, const int l); 35 34 #endif 36 void ngfDelete(number *a, const ringr);35 void ngfDelete(number *a, const coeffs r); 37 36 38 nMapFunc ngfSetMap(const ring src, const ringdst);37 nMapFunc ngfSetMap(const coeffs src, const coeffs dst); 39 38 40 39 void setGMPFloatDigits( size_t digits, size_t rest ); 41 number ngfMapQ(number from );40 number ngfMapQ(number from, const coeffs r); 42 41 #endif -
coeffs/longalg.cc
r634d93b r7d90aa 92 92 for (j=naI->anz-1; j>=0; j--) 93 93 p_Delete (&naI->liste[j],nacRing); 94 omFreeSize(( ADDRESS)naI->liste,naI->anz*sizeof(napoly));95 omFreeBin(( ADDRESS)naI, snaIdeal_bin);94 omFreeSize((void *)naI->liste,naI->anz*sizeof(napoly)); 95 omFreeBin((void *)naI, snaIdeal_bin); 96 96 naI=NULL; 97 97 } … … 978 978 p_Delete(&(l->z),r->algring); 979 979 p_Delete(&(l->n),r->algring); 980 omFreeBin(( ADDRESS)l, rnumber_bin);980 omFreeBin((void *)l, rnumber_bin); 981 981 } 982 982 *p = NULL; … … 1198 1198 if(lo->z==NULL) 1199 1199 { 1200 omFreeBin(( ADDRESS)lo, rnumber_bin);1200 omFreeBin((void *)lo, rnumber_bin); 1201 1201 lo=NULL; 1202 1202 } … … 1484 1484 if(a->z==NULL) 1485 1485 { 1486 omFreeBin(( ADDRESS)*p, rnumber_bin);1486 omFreeBin((void *)*p, rnumber_bin); 1487 1487 *p=NULL; 1488 1488 } … … 1524 1524 } 1525 1525 } 1526 omFreeSize(( ADDRESS)t,8);1526 omFreeSize((void *)t,8); 1527 1527 if (s[0]=='\0') 1528 1528 { 1529 omFree(( ADDRESS)s);1529 omFree((void *)s); 1530 1530 return NULL; 1531 1531 } … … 2115 2115 for (i=naI->anz-1; i>=0; i--) 2116 2116 p_Delete(&naI->liste[i],nacRing); 2117 omFreeBin(( ADDRESS)naI, snaIdeal_bin);2117 omFreeBin((void *)naI, snaIdeal_bin); 2118 2118 naI=NULL; 2119 2119 } -
coeffs/longrat.cc
r634d93b r7d90aa 45 45 #include <string.h> 46 46 #include <float.h> 47 #include <omalloc/omalloc.h>48 #include <kernel/febase.h>49 #include <kernel/numbers.h>50 #include <kernel/modulop.h>51 #include <kernel/ring.h>52 #include <kernel/shortfl.h>53 #include <kernel/mpr_complex.h>47 #include "coeffs.h" 48 #include "omalloc.h" 49 #include "numbers.h" 50 #include "modulop.h" 51 #include "shortfl.h" 52 #include "mpr_complex.h" 53 #include "longrat.h" 54 54 55 55 … … 660 660 bb->debug=654324; 661 661 #endif 662 FREE_RNUMBER(bb);662 omFreeBin((void *)bb, rnumber_bin); 663 663 } 664 664 u=nlShort3(u); … … 726 726 bb->debug=654324; 727 727 #endif 728 FREE_RNUMBER(bb);728 omFreeBin((void *)bb, rnumber_bin); 729 729 } 730 730 u=nlShort3(u); … … 803 803 bb->debug=654324; 804 804 #endif 805 FREE_RNUMBER(bb);805 omFreeBin((void *)bb, rnumber_bin); 806 806 } 807 807 if (mpz_isNeg(u->z)) … … 846 846 if (r==0) 847 847 { 848 FREE_RNUMBER(u);848 omFreeBin((void *)u, rnumber_bin); 849 849 return INT_TO_SR(i/j); 850 850 } … … 1396 1396 #endif 1397 1397 } 1398 FREE_RNUMBER(*a);1398 omFreeBin((void *) *a, rnumber_bin); 1399 1399 } 1400 1400 } … … 2462 2462 { 2463 2463 mpz_clear(&r->z); 2464 FREE_RNUMBER(r);2464 omFreeBin((void *)r, rnumber_bin); 2465 2465 r=INT_TO_SR(ui); 2466 2466 } -
coeffs/longrat.h
r634d93b r7d90aa 8 8 * ABSTRACT: computation with long rational numbers 9 9 */ 10 #include <kernel/structs.h>10 #include "coeffs.h" 11 11 12 #include <kernel/si_gmp.h> 12 #include "si_gmp.h" 13 14 typedef MP_INT lint; 13 15 14 16 #define SR_HDL(A) ((long)(A)) 15 17 16 18 #define SR_INT 1L 17 #define INT_TO_SR(INT) ((number) ((( (long)INT)<< 2) + SR_INT))19 #define INT_TO_SR(INT) ((number) (((long)INT << 2) + SR_INT)) 18 20 #define SR_TO_INT(SR) (((long)SR) >> 2) 19 20 21 21 22 #define MP_SMALL 1 … … 28 29 struct snumber 29 30 { 30 mpz_t z;31 mpz_t n;31 lint z; 32 lint n; 32 33 #if defined(LDEBUG) 33 34 int debug; … … 45 46 #endif // DO_LINLINE 46 47 47 LINLINE BOOLEAN nlEqual(number a, number b );48 LINLINE number nlInit(int i, const ringr);49 number nlRInit ( longi);50 LINLINE BOOLEAN nlIsOne(number a );51 LINLINE BOOLEAN nlIsZero(number za );48 LINLINE BOOLEAN nlEqual(number a, number b, const coeffs r); 49 LINLINE number nlInit(int i, const coeffs r); 50 number nlRInit (int i); 51 LINLINE BOOLEAN nlIsOne(number a, const coeffs r); 52 LINLINE BOOLEAN nlIsZero(number za, const coeffs r); 52 53 LINLINE number nlCopy(number a); 53 LINLINE void nlDelete(number *a, const ring r); 54 LINLINE number nlNeg(number za); 55 LINLINE number nlAdd(number la, number li); 56 LINLINE number nlSub(number la, number li); 57 LINLINE number nlMult(number a, number b); 54 LINLINE number nl_Copy(number a, const coeffs r); 55 LINLINE void nlDelete(number *a, const coeffs r); 56 LINLINE number nlNeg(number za, const coeffs r); 57 LINLINE number nlAdd(number la, number li, const coeffs r); 58 LINLINE number nlSub(number la, number li, const coeffs r); 59 LINLINE number nlMult(number a, number b, const coeffs r); 58 60 59 61 number nlInit2 (int i, int j); 60 62 number nlInit2gmp (mpz_t i, mpz_t j); 61 number nlGcd(number a, number b, const ringr);62 number nlLcm(number a, number b, const ringr); /*special routine !*/63 BOOLEAN nlGreater(number a, number b );64 BOOLEAN nlIsMOne(number a );65 int nlInt(number &n, const ringr);63 number nlGcd(number a, number b, const coeffs r); 64 number nlLcm(number a, number b, const coeffs r); /*special routine !*/ 65 BOOLEAN nlGreater(number a, number b, const coeffs r); 66 BOOLEAN nlIsMOne(number a, const coeffs r); 67 int nlInt(number &n, const coeffs r); 66 68 number nlBigInt(number &n); 67 69 #ifdef HAVE_RINGS 68 70 void nlGMP(number &i, number n); 69 71 #endif 70 BOOLEAN nlGreaterZero(number za );71 number nlInvers(number a );72 void nlNormalize(number &x );73 number nlDiv(number a, number b );74 number nlExactDiv(number a, number b );75 number nlIntDiv(number a, number b );76 number nlIntMod(number a, number b );77 void nlPower(number x, int exp, number *lu );78 const char * nlRead (const char *s, number *a );79 void nlWrite(number &a, const ringr);72 BOOLEAN nlGreaterZero(number za, const coeffs r); 73 number nlInvers(number a, const coeffs r); 74 void nlNormalize(number &x, const coeffs r); 75 number nlDiv(number a, number b, const coeffs r); 76 number nlExactDiv(number a, number b, const coeffs r); 77 number nlIntDiv(number a, number b, const coeffs r); 78 number nlIntMod(number a, number b, const coeffs r); 79 void nlPower(number x, int exp, number *lu, const coeffs r); 80 const char * nlRead (const char *s, number *a, const coeffs r); 81 void nlWrite(number &a, const coeffs r); 80 82 int nlModP(number n, int p); 81 int nlSize(number n );82 number nlGetDenom(number &n, const ringr);83 number nlGetNumerator(number &n, const ringr);83 int nlSize(number n, const coeffs r); 84 number nlGetDenom(number &n, const coeffs r); 85 number nlGetNumerator(number &n, const coeffs r); 84 86 number nlChineseRemainder(number *x, number *q,int rl); 85 87 #ifdef LDEBUG … … 88 90 extern number nlOne; 89 91 90 nMapFunc nlSetMap(const ring src, const ringdst);92 nMapFunc nlSetMap(const coeffs src, const coeffs dst); 91 93 #ifdef HAVE_RINGS 92 94 number nlMapGMP(number from); 93 95 #endif 94 96 95 //#define SI_THREADS 1 96 #ifdef SI_THREADS 97 # define ALLOC_RNUMBER() (number)malloc(sizeof(snumber));98 static inline number ALLOC0_RNUMBER() { number n=(number)malloc(sizeof(snumber));memset(n,0,sizeof(snumber));return n; } 99 #define FREE_RNUMBER(x) free(x) 100 #else 101 extern omBin rnumber_bin; 97 #ifndef OM_ALLOC_H 98 struct omBin_s; 99 #endif 100 extern omBin_s* rnumber_bin; 101 102 103 #define FREE_RNUMBER(x) omFreeBin((void *)x, rnumber_bin) 102 104 #define ALLOC_RNUMBER() (number)omAllocBin(rnumber_bin) 103 105 #define ALLOC0_RNUMBER() (number)omAlloc0Bin(rnumber_bin) 104 #define FREE_RNUMBER(x) omFreeBin((ADDRESS)x, rnumber_bin)105 #endif106 106 107 107 // in-place operations 108 void nlInpGcd(number &a, number b, const ringr);109 void nlInpIntDiv(number &a, number b, const ringr);110 LINLINE number nlInpAdd(number la, number li, const ringr);111 LINLINE void nlInpMult(number &a, number b, ringr);108 void nlInpGcd(number &a, number b, const coeffs r); 109 void nlInpIntDiv(number &a, number b, const coeffs r); 110 LINLINE number nlInpAdd(number la, number li, const coeffs r); 111 LINLINE void nlInpMult(number &a, number b, const coeffs r); 112 112 113 113 number nlFarey(number nP, number nN); … … 117 117 BOOLEAN nlDBTest(number a, char *f,int l); 118 118 #else 119 #define nlTest(a) ((void) 1)119 #define nlTest(a) ((void)0) 120 120 #endif 121 121 -
coeffs/longrat0.cc
r634d93b r7d90aa 139 139 StringAppendS(z); 140 140 } 141 omFreeSize(( ADDRESS)s,l);141 omFreeSize((void *)s,l); 142 142 } 143 143 } -
coeffs/modulop.cc
r634d93b r7d90aa 8 8 9 9 #include <string.h> 10 #include <kernel/mod2.h> 11 #include <omalloc/mylimits.h> 12 #include <kernel/structs.h> 13 #include <kernel/febase.h> 14 #include <omalloc/omalloc.h> 15 #include <kernel/numbers.h> 16 #include <kernel/longrat.h> 17 #include <kernel/mpr_complex.h> 18 #include <kernel/ring.h> 19 #ifdef HAVE_RINGS 20 #include <si_gmp.h> 21 #endif 22 #include <kernel/modulop.h> 23 24 long npPrimeM=0; 10 #include "coeffs.h" 11 #include "numbers.h" 12 #include "longrat.h" 13 #include "mpr_complex.h" 14 #include "modulop.h" 15 25 16 int npGen=0; 26 long npPminus1M=0;27 17 long npMapPrime; 28 18 … … 37 27 38 28 39 BOOLEAN npGreaterZero (number k )29 BOOLEAN npGreaterZero (number k, const coeffs r) 40 30 { 41 31 int h = (int)((long) k); 42 return ((int)h !=0) && (h <= ( npPrimeM>>1));32 return ((int)h !=0) && (h <= (r->npPrimeM>>1)); 43 33 } 44 34 … … 51 41 //} 52 42 53 number npMult (number a,number b )43 number npMult (number a,number b, const coeffs r) 54 44 { 55 45 if (((long)a == 0) || ((long)b == 0)) 56 46 return (number)0; 57 47 else 58 return npMultM(a,b );48 return npMultM(a,b, r); 59 49 } 60 50 … … 62 52 * create a number from int 63 53 */ 64 number npInit (int i, const ringr)54 number npInit (int i, const coeffs r) 65 55 { 66 56 long ii=i; … … 74 64 * convert a number to int (-p/2 .. p/2) 75 65 */ 76 int npInt(number &n, const ringr)66 int npInt(number &n, const coeffs r) 77 67 { 78 68 if ((long)n > (((long)r->ch) >>1)) return (int)((long)n -((long)r->ch)); … … 80 70 } 81 71 82 number npAdd (number a, number b )83 { 84 return npAddM(a,b );85 } 86 87 number npSub (number a, number b )88 { 89 return npSubM(a,b );90 } 91 92 BOOLEAN npIsZero (number a )72 number npAdd (number a, number b, const coeffs r) 73 { 74 return npAddM(a,b, r); 75 } 76 77 number npSub (number a, number b, const coeffs r) 78 { 79 return npSubM(a,b,r); 80 } 81 82 BOOLEAN npIsZero (number a, const coeffs r) 93 83 { 94 84 return 0 == (long)a; 95 85 } 96 86 97 BOOLEAN npIsOne (number a )87 BOOLEAN npIsOne (number a, const coeffs r) 98 88 { 99 89 return 1 == (long)a; 100 90 } 101 91 102 BOOLEAN npIsMOne (number a )103 { 104 return (( npPminus1M == (long)a)&&((long)1!=(long)a));92 BOOLEAN npIsMOne (number a, const coeffs r) 93 { 94 return ((r->npPminus1M == (long)a)&&((long)1!=(long)a)); 105 95 } 106 96 … … 115 105 #endif 116 106 117 long InvMod(long a )107 long InvMod(long a, const coeffs R) 118 108 { 119 109 long d, s, t; 120 110 121 111 #ifdef USE_NTL_XGCD 122 XGCD(d, s, t, a, npPrimeM);112 XGCD(d, s, t, a, R->npPrimeM); 123 113 assume (d == 1); 124 114 #else … … 127 117 assume(a>0); 128 118 u1=1; u2=0; 129 u = a; v = npPrimeM;119 u = a; v = R->npPrimeM; 130 120 131 121 while (v != 0) … … 144 134 #endif 145 135 if (s < 0) 146 return s + npPrimeM;136 return s + R->npPrimeM; 147 137 else 148 138 return s; … … 150 140 #endif 151 141 152 static inline number npInversM (number c)142 inline number npInversM (number c, const coeffs r) 153 143 { 154 144 #ifndef HAVE_DIV_MOD 155 return (number)(long) npExpTable[npPminus1M -npLogTable[(long)c]];145 return (number)(long)r->npExpTable[r->npPminus1M - r->npLogTable[(long)c]]; 156 146 #else 157 long inv=(long) npInvTable[(long)c];147 long inv=(long)r->npInvTable[(long)c]; 158 148 if (inv==0) 159 149 { 160 inv=InvMod((long)c );161 npInvTable[(long)c]=inv;150 inv=InvMod((long)c,r); 151 r->npInvTable[(long)c]=inv; 162 152 } 163 153 return (number)inv; … … 165 155 } 166 156 167 number npDiv (number a,number b )157 number npDiv (number a,number b, const coeffs r) 168 158 { 169 159 //#ifdef NV_OPS … … 181 171 else 182 172 { 183 int s = npLogTable[(long)a] -npLogTable[(long)b];173 int s = r->npLogTable[(long)a] - r->npLogTable[(long)b]; 184 174 if (s < 0) 185 s += npPminus1M;186 return (number)(long) npExpTable[s];175 s += r->npPminus1M; 176 return (number)(long)r->npExpTable[s]; 187 177 } 188 178 #else 189 number inv=npInversM(b );190 return npMultM(a,inv );191 #endif 192 } 193 number npInvers (number c )179 number inv=npInversM(b,r); 180 return npMultM(a,inv,r); 181 #endif 182 } 183 number npInvers (number c, const coeffs r) 194 184 { 195 185 if ((long)c==0) … … 198 188 return (number)0; 199 189 } 200 return npInversM(c );201 } 202 203 number npNeg (number c )190 return npInversM(c,r); 191 } 192 193 number npNeg (number c, const coeffs r) 204 194 { 205 195 if ((long)c==0) return c; 206 return npNegM(c );207 } 208 209 BOOLEAN npGreater (number a,number b )196 return npNegM(c,r); 197 } 198 199 BOOLEAN npGreater (number a,number b, const coeffs r) 210 200 { 211 201 //return (long)a != (long)b; … … 213 203 } 214 204 215 BOOLEAN npEqual (number a,number b )205 BOOLEAN npEqual (number a,number b, const coeffs r) 216 206 { 217 207 // return (long)a == (long)b; 218 return npEqualM(a,b );219 } 220 221 void npWrite (number &a, const ringr)208 return npEqualM(a,b,r); 209 } 210 211 void npWrite (number &a, const coeffs r) 222 212 { 223 213 if ((long)a>(((long)r->ch) >>1)) StringAppend("-%d",(int)(((long)r->ch)-((long)a))); … … 225 215 } 226 216 227 void npPower (number a, int i, number * result )217 void npPower (number a, int i, number * result, const coeffs r) 228 218 { 229 219 if (i==0) … … 238 228 else 239 229 { 240 npPower(a,i-1,result );241 *result = npMultM(a,*result );242 } 243 } 244 245 static const char* npEati(const char *s, int *i )230 npPower(a,i-1,result,r); 231 *result = npMultM(a,*result,r); 232 } 233 } 234 235 static const char* npEati(const char *s, int *i, const coeffs r) 246 236 { 247 237 … … 253 243 ii *= 10; 254 244 ii += *s++ - '0'; 255 if (ii >= (MAX_INT_VAL / 10)) ii = ii % npPrimeM;245 if (ii >= (MAX_INT_VAL / 10)) ii = ii % r->npPrimeM; 256 246 } 257 247 while (((*s) >= '0') && ((*s) <= '9')); 258 if (ii >= npPrimeM) ii = ii % npPrimeM;248 if (ii >= npPrimeM) ii = ii % r->npPrimeM; 259 249 *i=(int)ii; 260 250 } … … 263 253 } 264 254 265 const char * npRead (const char *s, number *a )255 const char * npRead (const char *s, number *a, const coeffs r) 266 256 { 267 257 int z; 268 258 int n=1; 269 259 270 s = npEati(s, &z );260 s = npEati(s, &z, r); 271 261 if ((*s) == '/') 272 262 { 273 263 s++; 274 s = npEati(s, &n );264 s = npEati(s, &n, r); 275 265 } 276 266 if (n == 1) … … 282 272 { 283 273 #ifdef NV_OPS 284 if ( npPrimeM>NV_MAX_PRIME)285 *a = nvDiv((number)z,(number)n );274 if (r->npPrimeM>NV_MAX_PRIME) 275 *a = nvDiv((number)z,(number)n,r); 286 276 else 287 277 #endif 288 *a = npDiv((number)z,(number)n );278 *a = npDiv((number)z,(number)n,r); 289 279 } 290 280 } 291 281 return s; 292 282 } 293 294 /*2295 * the last used charcteristic296 */297 //int npGetChar()298 //{299 // return npPrimeM;300 //}301 283 302 284 /*2 … … 304 286 */ 305 287 306 void npSetChar(int c, ringr)288 void npSetChar(int c, coeffs r) 307 289 { 308 290 … … 310 292 if ((c>1) || (c<(-1))) 311 293 { 312 if (c>1) npPrimeM = c;313 else npPrimeM = -c;314 npPminus1M =npPrimeM - 1;294 if (c>1) r->npPrimeM = c; 295 else r->npPrimeM = -c; 296 r->npPminus1M = r->npPrimeM - 1; 315 297 #ifdef NV_OPS 316 if (r->cf->npPrimeM >NV_MAX_PRIME) return; 317 #endif 318 #ifdef HAVE_DIV_MOD 319 npInvTable=r->cf->npInvTable; 298 if (r->npPrimeM >NV_MAX_PRIME) return; 320 299 #endif 321 300 #if !defined(HAVE_DIV_MOD) || !defined(HAVE_MULT_MOD) 322 npExpTable=r->cf->npExpTable;323 npLogTable=r->cf->npLogTable;324 301 npGen = npExpTable[1]; 325 302 #endif 326 303 } 327 else 328 { 329 npPrimeM=0; 330 #ifdef HAVE_DIV_MOD 331 npInvTable=NULL; 332 #endif 333 #if !defined(HAVE_DIV_MOD) || !defined(HAVE_MULT_MOD) 334 npExpTable=NULL; 335 npLogTable=NULL; 336 #endif 337 } 338 } 339 340 void npInitChar(int c, ring r) 304 } 305 306 void npInitChar(int c, coeffs r) 341 307 { 342 308 int i, w; … … 344 310 if ((c>1) || (c<(-1))) 345 311 { 346 if (c>1) r-> cf->npPrimeM = c;347 else r-> cf->npPrimeM = -c;348 r-> cf->npPminus1M = r->cf->npPrimeM - 1;312 if (c>1) r->npPrimeM = c; 313 else r->npPrimeM = -c; 314 r->npPminus1M = r->npPrimeM - 1; 349 315 #ifdef NV_OPS 350 if (r-> cf->npPrimeM <=NV_MAX_PRIME)316 if (r->npPrimeM <=NV_MAX_PRIME) 351 317 #endif 352 318 { 353 319 #if !defined(HAVE_DIV_MOD) || !defined(HAVE_MULT_MOD) 354 r-> cf->npExpTable=(unsigned short *)omAlloc( r->cf->npPrimeM*sizeof(unsigned short) );355 r-> cf->npLogTable=(unsigned short *)omAlloc( r->cf->npPrimeM*sizeof(unsigned short) );356 r-> cf->npExpTable[0] = 1;357 r-> cf->npLogTable[0] = 0;358 if (r-> cf->npPrimeM > 2)320 r->npExpTable=(unsigned short *)omAlloc( r->npPrimeM*sizeof(unsigned short) ); 321 r->npLogTable=(unsigned short *)omAlloc( r->npPrimeM*sizeof(unsigned short) ); 322 r->npExpTable[0] = 1; 323 r->npLogTable[0] = 0; 324 if (r->npPrimeM > 2) 359 325 { 360 326 w = 1; 361 327 loop 362 328 { 363 r-> cf->npLogTable[1] = 0;329 r->npLogTable[1] = 0; 364 330 w++; 365 331 i = 0; … … 367 333 { 368 334 i++; 369 r-> cf->npExpTable[i] =(int)(((long)w * (long)r->cf->npExpTable[i-1])370 % r-> cf->npPrimeM);371 r-> cf->npLogTable[r->cf->npExpTable[i]] = i;372 if (/*(i == npPrimeM - 1 ) ||*/ (r-> cf->npExpTable[i] == 1))335 r->npExpTable[i] =(int)(((long)w * (long)r->npExpTable[i-1]) 336 % r->npPrimeM); 337 r->npLogTable[r->npExpTable[i]] = i; 338 if (/*(i == npPrimeM - 1 ) ||*/ (r->npExpTable[i] == 1)) 373 339 break; 374 340 } 375 if (i == r-> cf->npPrimeM - 1)341 if (i == r->npPrimeM - 1) 376 342 break; 377 343 } … … 379 345 else 380 346 { 381 r-> cf->npExpTable[1] = 1;382 r-> cf->npLogTable[1] = 0;347 r->npExpTable[1] = 1; 348 r->npLogTable[1] = 0; 383 349 } 384 350 #endif 385 351 #ifdef HAVE_DIV_MOD 386 r-> cf->npInvTable=(unsigned short*)omAlloc0( r->cf->npPrimeM*sizeof(unsigned short) );352 r->npInvTable=(unsigned short*)omAlloc0( r->npPrimeM*sizeof(unsigned short) ); 387 353 #endif 388 354 } … … 395 361 396 362 #ifdef LDEBUG 397 BOOLEAN npDBTest (number a, const c har *f, const int l)398 { 399 if (((long)a<0) || ((long)a> npPrimeM))363 BOOLEAN npDBTest (number a, const coeffs r, const char *f, const int l) 364 { 365 if (((long)a<0) || ((long)a>r->npPrimeM)) 400 366 { 401 367 Print("wrong mod p number %ld at %s,%d\n",(long)a,f,l); … … 406 372 #endif 407 373 408 number npMap0(number from )409 { 410 return npInit(nlModP(from, npPrimeM),currRing);411 } 412 413 number npMapP(number from )374 number npMap0(number from, const coeffs dst_r) 375 { 376 return npInit(nlModP(from,dst_r->npPrimeM),dst_r); 377 } 378 379 number npMapP(number from, const coeffs dst_r) 414 380 { 415 381 long i = (long)from; … … 417 383 { 418 384 i-=npMapPrime; 419 while (i < 0) i+= npPrimeM;420 } 421 i%= npPrimeM;385 while (i < 0) i+=dst_r->npPrimeM; 386 } 387 i%=dst_r->npPrimeM; 422 388 return (number)i; 423 389 } 424 390 425 static number npMapLongR(number from )391 static number npMapLongR(number from, const coeffs dst_r) 426 392 { 427 393 gmp_float *ff=(gmp_float*)from; … … 436 402 size = (*f)[0]._mp_size; 437 403 if (size == 0) 438 return npInit(0, currRing);404 return npInit(0,dst_r); 439 405 if(size<0) 440 406 size = -size; … … 447 413 } 448 414 449 if( npPrimeM>2)415 if(dst_r->npPrimeM>2) 450 416 e=(*f)[0]._mp_exp-size; 451 417 else … … 490 456 if(res->s==0) 491 457 iz=(long)npDiv((number)iz,(number)in); 492 FREE_RNUMBER(res);458 omFreeBin((void *)res, rnumber_bin); 493 459 return (number)iz; 494 460 } … … 507 473 508 474 mpz_clear(erg); 509 omFree(( ADDRESS) erg);475 omFree((void *) erg); 510 476 return (number) r; 511 477 } … … 521 487 #endif 522 488 523 nMapFunc npSetMap(const ring src, const ringdst)489 nMapFunc npSetMap(const coeffs src, const coeffs dst) 524 490 { 525 491 #ifdef HAVE_RINGS 526 if ( rField_is_Ring_2toM(src))492 if (nField_is_Ring_2toM(src)) 527 493 { 528 494 return npMapMachineInt; 529 495 } 530 if ( rField_is_Ring_Z(src) || rField_is_Ring_PtoM(src) || rField_is_Ring_ModN(src))496 if (nField_is_Ring_Z(src) || nField_is_Ring_PtoM(src) || nField_is_Ring_ModN(src)) 531 497 { 532 498 return npMapGMP; 533 499 } 534 500 #endif 535 if ( rField_is_Q(src))501 if (nField_is_Q(src)) 536 502 { 537 503 return npMap0; 538 504 } 539 if ( rField_is_Zp(src) )540 { 541 if ( rChar(src) == rChar(dst))505 if ( nField_is_Zp(src) ) 506 { 507 if (n_GetChar(src) == n_GetChar(dst)) 542 508 { 543 509 return ndCopy; … … 545 511 else 546 512 { 547 npMapPrime= rChar(src);513 npMapPrime=n_GetChar(src); 548 514 return npMapP; 549 515 } 550 516 } 551 if ( rField_is_long_R(src))517 if (nField_is_long_R(src)) 552 518 { 553 519 return npMapLongR; … … 561 527 #ifdef NV_OPS 562 528 563 number nvMult (number a,number b )529 number nvMult (number a,number b, const coeffs r) 564 530 { 565 531 //if (((long)a == 0) || ((long)b == 0)) … … 584 550 u1=1; v1=0; 585 551 u2=0; v2=1; 586 u = a; v = npPrimeM;552 u = a; v = R->npPrimeM; 587 553 588 554 while (v != 0) … … 603 569 //t = v1; 604 570 if (s < 0) 605 return s + npPrimeM;571 return s + R->npPrimeM; 606 572 else 607 573 return s; 608 574 } 609 575 610 static inline number nvInversM (number c)611 { 612 long inv=nvInvMod((long)c );576 inline number nvInversM (number c, const coeffs r) 577 { 578 long inv=nvInvMod((long)c,r); 613 579 return (number)inv; 614 580 } 615 581 616 number nvDiv (number a,number b )582 number nvDiv (number a,number b, const coeffs r) 617 583 { 618 584 if ((long)a==0) … … 625 591 else 626 592 { 627 number inv=nvInversM(b );628 return nvMultM(a,inv );629 } 630 } 631 number nvInvers (number c )593 number inv=nvInversM(b,r); 594 return nvMultM(a,inv,r); 595 } 596 } 597 number nvInvers (number c, const coeffs r) 632 598 { 633 599 if ((long)c==0) … … 636 602 return (number)0; 637 603 } 638 return nvInversM(c );639 } 640 void nvPower (number a, int i, number * result )604 return nvInversM(c,r); 605 } 606 void nvPower (number a, int i, number * result, const coeffs r) 641 607 { 642 608 if (i==0) … … 651 617 else 652 618 { 653 nvPower(a,i-1,result );654 *result = nvMultM(a,*result );655 } 656 } 657 #endif 619 nvPower(a,i-1,result,r); 620 *result = nvMultM(a,*result,r); 621 } 622 } 623 #endif -
coeffs/modulop.h
r634d93b r7d90aa 8 8 * ABSTRACT: numbers modulo p (<=32003) 9 9 */ 10 #include <kernel/structs.h>10 #include "coeffs.h" 11 11 12 12 // defines are in struct.h … … 22 22 #define NV_MAX_PRIME 32003 23 23 24 extern long npPrimeM;25 24 extern int npGen; 26 25 extern long npMapPrime; 27 26 28 BOOLEAN npGreaterZero (number k );29 number npMult (number a, number b );30 number npInit (int i, const ringr);31 int npInt (number &n, const ringr);32 number npAdd (number a, number b );33 number npSub (number a, number b );34 void npPower (number a, int i, number * result );35 BOOLEAN npIsZero (number a );36 BOOLEAN npIsOne (number a );37 BOOLEAN npIsMOne (number a );38 number npDiv (number a, number b );39 number npNeg (number c );40 number npInvers (number c );41 BOOLEAN npGreater (number a, number b );42 BOOLEAN npEqual (number a, number b );43 void npWrite (number &a, const ringr);44 const char * npRead (const char *s, number *a );27 BOOLEAN npGreaterZero (number k, const coeffs r); 28 number npMult (number a, number b, const coeffs r); 29 number npInit (int i, const coeffs r); 30 int npInt (number &n, const coeffs r); 31 number npAdd (number a, number b,const coeffs r); 32 number npSub (number a, number b,const coeffs r); 33 void npPower (number a, int i, number * result,const coeffs r); 34 BOOLEAN npIsZero (number a,const coeffs r); 35 BOOLEAN npIsOne (number a,const coeffs r); 36 BOOLEAN npIsMOne (number a,const coeffs r); 37 number npDiv (number a, number b,const coeffs r); 38 number npNeg (number c,const coeffs r); 39 number npInvers (number c,const coeffs r); 40 BOOLEAN npGreater (number a, number b,const coeffs r); 41 BOOLEAN npEqual (number a, number b,const coeffs r); 42 void npWrite (number &a, const coeffs r); 43 const char * npRead (const char *s, number *a,const coeffs r); 45 44 #ifdef LDEBUG 46 BOOLEAN npDBTest (number a, const char *f, const int l);47 #define npTest(A ) npDBTest(A,__FILE__,__LINE__)45 BOOLEAN npDBTest (number a,const coeffs r, const char *f, const int l); 46 #define npTest(A,r) npDBTest(A,r,__FILE__,__LINE__) 48 47 #else 49 #define npTest(A ) (0)48 #define npTest(A,r) (0) 50 49 #endif 51 void npSetChar(int c, ringr);52 void npInitChar(int c, ringr);50 void npSetChar(int c, coeffs r); 51 void npInitChar(int c, coeffs r); 53 52 54 53 //int npGetChar(); 55 54 56 nMapFunc npSetMap(const ring src, const ringdst);57 number npMapP(number from );58 number npMap0(number from );55 nMapFunc npSetMap(const coeffs src, const coeffs dst); 56 number npMapP(number from, const coeffs r); 57 number npMap0(number from, const coeffs r); 59 58 /*-------specials for spolys, do NOT use otherwise--------------------------*/ 60 59 /* for npMultM, npSubM, npNegM, npEqualM : */ … … 86 85 #endif 87 86 #ifdef HAVE_MULT_MOD 88 static inline number npMultM(number a, number b )87 static inline number npMultM(number a, number b, const coeffs r) 89 88 { 90 89 return (number) 91 ((((unsigned long) a)*((unsigned long) b)) % ((unsigned long) npPrimeM));90 ((((unsigned long) a)*((unsigned long) b)) % ((unsigned long) r->npPrimeM)); 92 91 } 93 92 #else 94 static inline number npMultM(number a, number b )93 static inline number npMultM(number a, number b, const coeffs r) 95 94 { 96 long x = (long) npLogTable[(long)a]+npLogTable[(long)b];97 return (number)(long) npExpTable[x<npPminus1M ? x : x-npPminus1M];95 long x = (long)r->npLogTable[(long)a]+ r->npLogTable[(long)b]; 96 return (number)(long)r->npExpTable[x<r->npPminus1M ? x : x- r->npPminus1M]; 98 97 } 99 98 #endif … … 120 119 #endif 121 120 #ifdef HAVE_GENERIC_ADD 122 static inline number npAddM(number a, number b )121 static inline number npAddM(number a, number b, const coeffs r) 123 122 { 124 long r= (long)a + (long)b;125 return (number)( r >= npPrimeM ? r - npPrimeM : r);123 long R = (long)a + (long)b; 124 return (number)(R >= r->npPrimeM ? R - r->npPrimeM : R); 126 125 } 127 static inline number npSubM(number a, number b )126 static inline number npSubM(number a, number b, const coeffs r) 128 127 { 129 128 return (number)((long)a<(long)b ? 130 npPrimeM-(long)b+(long)a : (long)a-(long)b);129 r->npPrimeM-(long)b+(long)a : (long)a-(long)b); 131 130 } 132 131 #else 133 static inline number npAddM(number a, number b )132 static inline number npAddM(number a, number b, const coeffs r) 134 133 { 135 134 long res = ((long)a + (long)b); 136 res -= npPrimeM;135 res -= r->npPrimeM; 137 136 #if SIZEOF_LONG == 8 138 res += (res >> 63) & npPrimeM;137 res += (res >> 63) & r->npPrimeM; 139 138 #else 140 res += (res >> 31) & npPrimeM;139 res += (res >> 31) & r->npPrimeM; 141 140 #endif 142 141 return (number)res; 143 142 } 144 static inline number npSubM(number a, number b )143 static inline number npSubM(number a, number b, const coeffs r) 145 144 { 146 145 long res = ((long)a - (long)b); 147 146 #if SIZEOF_LONG == 8 148 res += (res >> 63) & npPrimeM;147 res += (res >> 63) & r->npPrimeM; 149 148 #else 150 res += (res >> 31) & npPrimeM;149 res += (res >> 31) & r->npPrimeM; 151 150 #endif 152 151 return (number)res; … … 154 153 #endif 155 154 156 static inline BOOLEAN npIsZeroM (number a )155 static inline BOOLEAN npIsZeroM (number a, const coeffs r) 157 156 { 158 157 return 0 == (long)a; … … 166 165 */ 167 166 168 #define npNegM(A ) (number)(npPrimeM-(long)(A))169 #define npEqualM(A,B ) ((A)==(B))167 #define npNegM(A,r) (number)(r->npPrimeM-(long)(A)) 168 #define npEqualM(A,B,r) ((A)==(B)) 170 169 171 170 172 171 #ifdef NV_OPS 173 static inline number nvMultM(number a, number b )172 static inline number nvMultM(number a, number b, const coeffs r) 174 173 { 175 174 #if SIZEOF_LONG == 4 … … 179 178 #endif 180 179 return (number) 181 (unsigned long)((ULONG64 a)*(ULONG64 b) % (ULONG64 npPrimeM));180 (unsigned long)((ULONG64 a)*(ULONG64 b) % (ULONG64 r->npPrimeM)); 182 181 } 183 number nvMult (number a, number b); 184 number nvDiv (number a, number b); 185 number nvInvers (number c); 186 void nvPower (number a, int i, number * result); 187 void nvInpMult (number &a, number b, const ring r); 182 number nvMult (number a, number b, const coeffs r); 183 number nvDiv (number a, number b, const coeffs r); 184 number nvInvers (number c, const coeffs r); 185 void nvPower (number a, int i, number * result, const coeffs r); 188 186 #endif 189 187 -
coeffs/mpr_base.cc
r634d93b r7d90aa 429 429 for ( i= 0; i <= max; i++ ) 430 430 { 431 omFreeSize( ( ADDRESS) points[i]->point, fdim * sizeof(Coord_t) );432 omFreeSize( ( ADDRESS) points[i], sizeof(onePoint) );433 } 434 omFreeSize( ( ADDRESS) points, (max+1) * sizeof(onePointP) );431 omFreeSize( (void *) points[i]->point, fdim * sizeof(Coord_t) ); 432 omFreeSize( (void *) points[i], sizeof(onePoint) ); 433 } 434 omFreeSize( (void *) points, (max+1) * sizeof(onePointP) ); 435 435 } 436 436 … … 573 573 pIter( piter ); 574 574 } 575 omFreeSize( ( ADDRESS) vert, (dim+1) * sizeof(int) );575 omFreeSize( (void *) vert, (dim+1) * sizeof(int) ); 576 576 } 577 577 … … 591 591 if ( j > dim ) break; 592 592 } 593 omFreeSize( ( ADDRESS) vert, (dim+1) * sizeof(int) );593 omFreeSize( (void *) vert, (dim+1) * sizeof(int) ); 594 594 595 595 if ( i > num ) return 0; … … 712 712 lifted= true; 713 713 714 if ( !outerL ) omFreeSize( ( ADDRESS) l, (dim+1) * sizeof(int) );714 if ( !outerL ) omFreeSize( (void *) l, (dim+1) * sizeof(int) ); 715 715 } 716 716 //<- … … 811 811 } // i 812 812 813 omFreeSize( ( ADDRESS) vert, (idelem+1) * sizeof(int) );813 omFreeSize( (void *) vert, (idelem+1) * sizeof(int) ); 814 814 815 815 #ifdef mprDEBUG_PROT … … 875 875 } // i 876 876 877 omFreeSize( ( ADDRESS) vert, (idelem+1) * sizeof(int) );877 omFreeSize( (void *) vert, (idelem+1) * sizeof(int) ); 878 878 879 879 #ifdef mprDEBUG_PROT … … 1399 1399 1400 1400 // clean up 1401 omFreeSize( ( ADDRESS) optSum, (LP->m) * sizeof(struct setID) );1401 omFreeSize( (void *) optSum, (LP->m) * sizeof(struct setID) ); 1402 1402 1403 1403 mprSTICKYPROT(ST_SPARSE_RC); … … 1479 1479 1480 1480 pDelete( &epp ); 1481 omFreeSize( ( ADDRESS) epp_mon, (n+2) * sizeof(int) );1482 omFreeSize( ( ADDRESS) eexp, (pVariables+1)*sizeof(int));1481 omFreeSize( (void *) epp_mon, (n+2) * sizeof(int) ); 1482 omFreeSize( (void *) eexp, (pVariables+1)*sizeof(int)); 1483 1483 1484 1484 #ifdef mprDEBUG_ALL … … 1542 1542 } 1543 1543 1544 omFreeSize( ( ADDRESS) vert.point, (pVariables+2) * sizeof(Coord_t) );1544 omFreeSize( (void *) vert.point, (pVariables+2) * sizeof(Coord_t) ); 1545 1545 1546 1546 return vs; … … 1717 1717 delete Qi[i]; 1718 1718 } 1719 omFreeSize( ( ADDRESS) Qi, idelem * sizeof(pointSet*) );1719 omFreeSize( (void *) Qi, idelem * sizeof(pointSet*) ); 1720 1720 1721 1721 delete E; … … 2097 2097 } 2098 2098 // OB: ????? (solve_s.tst) 2099 omfreeSize( ( ADDRESS)resVectorList[i].numColVector,2099 omfreeSize( (void *)resVectorList[i].numColVector, 2100 2100 numVectors * sizeof( number ) ); 2101 omfreeSize( ( ADDRESS)resVectorList[i].numColParNr,2101 omfreeSize( (void *)resVectorList[i].numColParNr, 2102 2102 (pVariables+1) * sizeof(int) ); 2103 2103 } 2104 2104 2105 omFreeSize( ( ADDRESS)resVectorList, veclistmax*sizeof( resVector ) );2105 omFreeSize( (void *)resVectorList, veclistmax*sizeof( resVector ) ); 2106 2106 2107 2107 // free matrix m … … 3055 3055 // free some stuff: pev, presult 3056 3056 for ( i=0; i < n; i++ ) nDelete( pev + i ); 3057 omFreeSize( ( ADDRESS)pev, n * sizeof( number ) );3057 omFreeSize( (void *)pev, n * sizeof( number ) ); 3058 3058 3059 3059 for ( i=0; i <= tdg; i++ ) nDelete( presults+i ); 3060 omFreeSize( ( ADDRESS)presults, (tdg + 1) * sizeof( number ) );3060 omFreeSize( (void *)presults, (tdg + 1) * sizeof( number ) ); 3061 3061 3062 3062 return roots; … … 3172 3172 // free some stuff: pev, presult 3173 3173 for ( i=0; i < n; i++ ) nDelete( pevpoint + i ); 3174 omFreeSize( ( ADDRESS)pevpoint, n * sizeof( number ) );3174 omFreeSize( (void *)pevpoint, n * sizeof( number ) ); 3175 3175 3176 3176 return roots; -
coeffs/mpr_complex.cc
r634d93b r7d90aa 598 598 && (strlen(in)-(in[0]=='-'?1:0) == oprec) ) 599 599 { 600 omFree( ( ADDRESS) in );600 omFree( (void *) in ); 601 601 insize= (exponent+oprec+2) * sizeof(char) + 10; 602 602 in= (char*)omAlloc( insize ); … … 605 605 } 606 606 nout= nicifyFloatStr( in, exponent, oprec, &size, SIGN_EMPTY ); 607 omFree( ( ADDRESS) in );607 omFree( (void *) in ); 608 608 out= (char*)omAlloc( (strlen(nout)+1) * sizeof(char) ); 609 609 strcpy( out, nout ); 610 omFree( ( ADDRESS) nout );610 omFree( (void *) nout ); 611 611 612 612 return out; … … 740 740 sprintf(out,"(%s%s)",c.imag().sign()>=0?"I*":"-I*",in_imag); 741 741 } 742 omFree( ( ADDRESS) in_real );743 omFree( ( ADDRESS) in_imag );742 omFree( (void *) in_real ); 743 omFree( (void *) in_imag ); 744 744 } 745 745 else -
coeffs/mpr_complex.h
r634d93b r7d90aa 14 14 //-> include & define stuff 15 15 // must have gmp version >= 2 16 #include <kernel/si_gmp.h> 17 #include <kernel/numbers.h> 18 #include <kernel/ring.h> 19 #include <kernel/mpr_global.h> 16 #include "si_gmp.h" 17 #include "numbers.h" 18 #include "mpr_global.h" 20 19 21 20 #define ZTOF 1 … … 302 301 gmp_complex sqrt( const gmp_complex & x ); 303 302 304 inline gmp_complex numberToComplex( number num ) 305 { 306 if (rField_is_long_C()) { 303 inline gmp_complex numberToComplex( number num, const coeffs r ) 304 { 305 if (nField_is_long_C(r)) 306 { 307 307 return *(gmp_complex*)num; 308 } else { 308 } 309 else 310 { 309 311 return gmp_complex( numberToFloat(num) ); 310 312 } -
coeffs/mpr_numeric.cc
r634d93b r7d90aa 55 55 int j; 56 56 for ( j= 0; j < cn; j++ ) nDelete( x+j ); 57 omFreeSize( ( ADDRESS)x, cn * sizeof( number ) );57 omFreeSize( (void *)x, cn * sizeof( number ) ); 58 58 } 59 59 … … 145 145 } 146 146 147 omFreeSize( ( ADDRESS) exp, (n+1) * sizeof(int) );147 omFreeSize( (void *) exp, (n+1) * sizeof(int) ); 148 148 149 149 pSortAdd(pit); … … 242 242 // free mem 243 243 for ( j= 0; j < cn; j++ ) nDelete( c+j ); 244 omFreeSize( ( ADDRESS)c, cn * sizeof( number ) );244 omFreeSize( (void *)c, cn * sizeof( number ) ); 245 245 246 246 nDelete( &tmp1 ); … … 289 289 { 290 290 for ( i=0; i < anz+2; i++ ) nDelete( ievpoint + i ); 291 omFreeSize( ( ADDRESS)ievpoint, (anz+2) * sizeof( number ) );291 omFreeSize( (void *)ievpoint, (anz+2) * sizeof( number ) ); 292 292 } 293 293 294 294 for ( i=0; i <= tdg; i++ ) nDelete( coeffs + i ); 295 omFreeSize( ( ADDRESS)coeffs, (tdg+1) * sizeof( number ) );295 omFreeSize( (void *)coeffs, (tdg+1) * sizeof( number ) ); 296 296 297 297 // theroots löschen 298 298 for ( i=0; i < tdg; i++ ) delete theroots[i]; 299 omFreeSize( ( ADDRESS) theroots, (tdg)*sizeof(gmp_complex*) );299 omFreeSize( (void *) theroots, (tdg)*sizeof(gmp_complex*) ); 300 300 301 301 //mprPROTnl("~rootContainer()"); … … 464 464 // free memory 465 465 for ( i=0; i <= tdg; i++ ) delete ad[i]; 466 omFreeSize( ( ADDRESS) ad, (tdg+1)*sizeof(gmp_complex*) );466 omFreeSize( (void *) ad, (tdg+1)*sizeof(gmp_complex*) ); 467 467 468 468 return found_roots; … … 547 547 mprSTICKYPROT("\n"); 548 548 for ( i=0; i <= tdg; i++ ) delete ad[i]; 549 omFreeSize( ( ADDRESS) ad, (tdg+1)*sizeof( gmp_complex* ));549 omFreeSize( (void *) ad, (tdg+1)*sizeof( gmp_complex* )); 550 550 551 551 return ret; … … 1007 1007 for( i= 0; i < LiPM_rows; i++ ) 1008 1008 { 1009 omFreeSize( ( ADDRESS) LiPM[i], LiPM_cols * sizeof(mprfloat) );1010 } 1011 omFreeSize( ( ADDRESS) LiPM, LiPM_rows * sizeof(mprfloat *) );1012 1013 omFreeSize( ( ADDRESS) iposv, 2*LiPM_rows*sizeof(int) );1014 omFreeSize( ( ADDRESS) izrov, 2*LiPM_rows*sizeof(int) );1009 omFreeSize( (void *) LiPM[i], LiPM_cols * sizeof(mprfloat) ); 1010 } 1011 omFreeSize( (void *) LiPM, LiPM_rows * sizeof(mprfloat *) ); 1012 1013 omFreeSize( (void *) iposv, 2*LiPM_rows*sizeof(int) ); 1014 omFreeSize( (void *) izrov, 2*LiPM_rows*sizeof(int) ); 1015 1015 } 1016 1016 … … 1129 1129 icase=-2; 1130 1130 // free mem l1,l2,l3; 1131 omFreeSize( ( ADDRESS) l3, (m+1) * sizeof(int) );1132 omFreeSize( ( ADDRESS) l2, (m+1) * sizeof(int) );1133 omFreeSize( ( ADDRESS) l1, (n+1) * sizeof(int) );1131 omFreeSize( (void *) l3, (m+1) * sizeof(int) ); 1132 omFreeSize( (void *) l2, (m+1) * sizeof(int) ); 1133 omFreeSize( (void *) l1, (n+1) * sizeof(int) ); 1134 1134 return; 1135 1135 } … … 1156 1156 icase= -1; // no solution found 1157 1157 // free mem l1,l2,l3; 1158 omFreeSize( ( ADDRESS) l3, (m+1) * sizeof(int) );1159 omFreeSize( ( ADDRESS) l2, (m+1) * sizeof(int) );1160 omFreeSize( ( ADDRESS) l1, (n+1) * sizeof(int) );1158 omFreeSize( (void *) l3, (m+1) * sizeof(int) ); 1159 omFreeSize( (void *) l2, (m+1) * sizeof(int) ); 1160 omFreeSize( (void *) l1, (n+1) * sizeof(int) ); 1161 1161 return; 1162 1162 } … … 1193 1193 icase = -1; // no solution found 1194 1194 // free mem l1,l2,l3; 1195 omFreeSize( ( ADDRESS) l3, (m+1) * sizeof(int) );1196 omFreeSize( ( ADDRESS) l2, (m+1) * sizeof(int) );1197 omFreeSize( ( ADDRESS) l1, (n+1) * sizeof(int) );1195 omFreeSize( (void *) l3, (m+1) * sizeof(int) ); 1196 omFreeSize( (void *) l2, (m+1) * sizeof(int) ); 1197 omFreeSize( (void *) l1, (n+1) * sizeof(int) ); 1198 1198 return; 1199 1199 } … … 1241 1241 icase=0; // finite solution found 1242 1242 // free mem l1,l2,l3 1243 omFreeSize( ( ADDRESS) l3, (m+1) * sizeof(int) );1244 omFreeSize( ( ADDRESS) l2, (m+1) * sizeof(int) );1245 omFreeSize( ( ADDRESS) l1, (n+1) * sizeof(int) );1243 omFreeSize( (void *) l3, (m+1) * sizeof(int) ); 1244 omFreeSize( (void *) l2, (m+1) * sizeof(int) ); 1245 omFreeSize( (void *) l1, (n+1) * sizeof(int) ); 1246 1246 return; 1247 1247 } … … 1255 1255 icase=1; /* unbounded */ 1256 1256 // free mem 1257 omFreeSize( ( ADDRESS) l3, (m+1) * sizeof(int) );1258 omFreeSize( ( ADDRESS) l2, (m+1) * sizeof(int) );1259 omFreeSize( ( ADDRESS) l1, (n+1) * sizeof(int) );1257 omFreeSize( (void *) l3, (m+1) * sizeof(int) ); 1258 omFreeSize( (void *) l2, (m+1) * sizeof(int) ); 1259 omFreeSize( (void *) l1, (n+1) * sizeof(int) ); 1260 1260 return; 1261 1261 } -
coeffs/numbers.cc
r634d93b r7d90aa 10 10 #include <string.h> 11 11 #include <stdlib.h> 12 #include <kernel/mod2.h> 13 #include <kernel/structs.h> 14 #include <kernel/febase.h> 15 #include <kernel/kstd1.h> 16 #include <kernel/numbers.h> 17 #include <kernel/longrat.h> 18 #include <kernel/longalg.h> 19 #include <kernel/longtrans.h> 20 #include <kernel/modulop.h> 21 #include <kernel/gnumpfl.h> 22 #include <kernel/gnumpc.h> 23 #include <kernel/ring.h> 24 #include <kernel/ffields.h> 25 #include <kernel/shortfl.h> 12 #include "coeffs.h" 13 #include "numbers.h" 14 #include "longrat.h" 15 #include "longalg.h" 16 #include "modulop.h" 17 #include "gnumpfl.h" 18 #include "gnumpc.h" 19 #include "ffields.h" 20 #include "shortfl.h" 21 #include "longtrans.h" 26 22 #ifdef HAVE_RINGS 27 23 #include <kernel/rmodulo2m.h> … … 35 31 extern int IsPrime(int p); 36 32 37 number (*nInit_bigint)(number i);38 number (*nPar)(int i);39 int (*nParDeg)(number n);40 int (*nSize)(number n);41 int (*n_Int)(number &n, const ring r);42 numberfunc nMult, nSub, nAdd, nDiv, nIntDiv, nIntMod, nExactDiv;43 number (*nNeg)(number a);44 number (*nInvers)(number a);45 void (*nNormalize)(number &a);46 number (*nCopy)(number a);47 number (*nRePart)(number a);48 number (*nImPart)(number a);49 #ifdef HAVE_RINGS50 BOOLEAN (*nDivBy)(number a,number b);51 int (*nDivComp)(number a,number b);52 BOOLEAN (*nIsUnit)(number a);53 number (*nGetUnit)(number a);54 number (*nExtGcd)(number a, number b, number *s, number *t);55 #endif56 BOOLEAN (*nGreater)(number a,number b);57 BOOLEAN (*nEqual)(number a,number b);58 BOOLEAN (*nIsZero)(number a);59 BOOLEAN (*nIsOne)(number a);60 BOOLEAN (*nIsMOne)(number a);61 BOOLEAN (*nGreaterZero)(number a);62 const char* (*nRead)(const char *s,number *a);63 void (*nPower)(number a, int i, number * result);64 number (*nGcd)(number a, number b, const ring r);65 number (*nLcm)(number a, number b, const ring r);66 char * (*nName)(number n);67 68 33 /*0 implementation*/ 69 34 number nNULL; /* the 0 as constant */ … … 72 37 73 38 void nNew(number* d) { *d=NULL; } 74 void ndDelete(number* d, const ringr) { *d=NULL; }75 void ndInpMult(number &a, number b, const ringr)39 void ndDelete(number* d, const coeffs r) { *d=NULL; } 40 void ndInpMult(number &a, number b, const coeffs r) 76 41 { 77 42 number n=n_Mult(a,b,r); … … 79 44 a=n; 80 45 } 81 number ndInpAdd(number &a, number b, const ringr)46 number ndInpAdd(number &a, number b, const coeffs r) 82 47 { 83 48 number n=n_Add(a,b,r); … … 95 60 #endif 96 61 97 void nDummy2(number& d ) { }98 99 char * ndName(number n ) { return NULL; }100 101 number ndPar(int i ) { return nInit(0); }102 103 number ndReturn0(number n ) { return nInit(0); }104 105 int ndParDeg(number n ) { return 0; }106 107 number ndGcd(number a, number b, const ringr) { return n_Init(1,r); }108 109 number ndIntMod(number a, number b ) { return nInit(0); }110 111 number ndGetDenom(number &n, const ringr) { return n_Init(1,r); }112 number ndGetNumerator(number &a,const ring r) { return r->cf->nCopy(a); }113 114 int ndSize(number a ) { return (int)nIsZero(a)==FALSE; }62 void nDummy2(number& d, const coeffs r) { } 63 64 char * ndName(number n, const coeffs r) { return NULL; } 65 66 number ndPar(int i, const coeffs r) { return n_Init(0,r); } 67 68 number ndReturn0(number n, const coeffs r) { return n_Init(0,r); } 69 70 int ndParDeg(number n, const coeffs r) { return 0; } 71 72 number ndGcd(number a, number b, const coeffs r) { return n_Init(1,r); } 73 74 number ndIntMod(number a, number b, const coeffs r) { return n_Init(0,r); } 75 76 number ndGetDenom(number &n, const coeffs r) { return n_Init(1,r); } 77 number ndGetNumerator(number &a,const coeffs r) { return n_Copy(a,r); } 78 79 int ndSize(number a, const coeffs r) { return (int)n_IsZero(a,r)==FALSE; } 115 80 116 81 number ndCopy(number a) { return a; } 117 number nd_Copy(number a,const ring r) { return r->cf->nCopy(a); }82 number nd_Copy(number a,const coeffs r) { return r->nCopy(a); } 118 83 119 84 #ifdef HAVE_RINGS … … 128 93 * init nDelete for characteristic c (complete==FALSE) 129 94 */ 130 void nSetChar( ringr)95 void nSetChar(coeffs r) 131 96 { 132 97 int c=rInternalChar(r); 133 98 134 99 /*--------------------- Q -----------------*/ 135 if ( rField_is_Q(r))136 { 137 nInit_bigint=nlCopy;100 if (nField_is_Q(r)) 101 { 102 r->nInit_bigint=nl_Copy; 138 103 } 139 104 /*--------------------- Q_a/ Zp_a -----------------*/ 140 else if (rField_is_Extension(r)) 141 { 105 else if (nField_is_Extension(r)) 106 { 107 if (r->minpoly != NULL) 108 { 142 109 naSetChar(c,r); 143 if (rField_is_Q_a()) nInit_bigint=naMap00; 144 if (rField_is_Zp_a()) nInit_bigint=naMap0P; 110 if (rField_is_Q_a(r)) r->nInit_bigint=naMap00; 111 if (rField_is_Zp_a(r)) r->nInit_bigint=naMap0P; 112 } 113 else 114 { 115 ntSetChar(c,r); 116 if (rField_is_Q_a(r)) r->nInit_bigint=ntMap00; 117 if (rField_is_Zp_a(r)) r->nInit_bigint=ntMap0P; 118 } 145 119 } 146 120 #ifdef HAVE_RINGS 147 121 /*----------------------ring Z / 2^m----------------*/ 148 else if ( rField_is_Ring_2toM(r))122 else if (nField_is_Ring_2toM(r)) 149 123 { 150 124 nr2mSetExp(c, r); 151 nInit_bigint=nr2mMapQ;125 r->nInit_bigint=nr2mMapQ; 152 126 } 153 127 /*----------------------ring Z ----------------*/ 154 else if ( rField_is_Ring_Z(r))128 else if (nField_is_Ring_Z(r)) 155 129 { 156 130 nrzSetExp(c, r); 157 nInit_bigint=nrzMapQ;131 r->nInit_bigint=nrzMapQ; 158 132 } 159 133 /*----------------------ring Z / n----------------*/ 160 else if ( rField_is_Ring_ModN(r))134 else if (nField_is_Ring_ModN(r)) 161 135 { 162 136 nrnSetExp(c, r); 163 nInit_bigint=nrnMapQ;137 r->nInit_bigint=nrnMapQ; 164 138 } 165 139 /*----------------------ring Z / n----------------*/ 166 else if ( rField_is_Ring_PtoM(r))140 else if (nField_is_Ring_PtoM(r)) 167 141 { 168 142 nrnSetExp(c, r); 169 nInit_bigint=nrnMapQ;170 } 171 #endif 172 else if ( rField_is_Zp(r))143 r->nInit_bigint=nrnMapQ; 144 } 145 #endif 146 else if (nField_is_Zp(r)) 173 147 /*----------------------char. p----------------*/ 174 148 { 175 149 npSetChar(c, r); 176 nInit_bigint=npMap0;150 r->nInit_bigint=npMap0; 177 151 } 178 152 /* -------------- GF(p^m) -----------------------*/ 179 else if ( rField_is_GF(r))153 else if (nField_is_GF(r)) 180 154 { 181 155 nfSetChar(c,r->parameter); 182 nInit_bigint=ndReturn0; // not impl.156 r->nInit_bigint=ndReturn0; // not impl. 183 157 } 184 158 /* -------------- R -----------------------*/ 185 159 //if (c==(-1)) 186 else if ( rField_is_R(r))187 { 188 nInit_bigint=nrMapQ;160 else if (nField_is_R(r)) 161 { 162 r->nInit_bigint=nrMapQ; 189 163 } 190 164 /* -------------- long R -----------------------*/ 191 165 /* -------------- long C -----------------------*/ 192 else if (( rField_is_long_R(r))193 || ( rField_is_long_C(r)))166 else if ((nField_is_long_R(r)) 167 || (nField_is_long_C(r))) 194 168 { 195 169 setGMPFloatDigits(r->float_len,r->float_len2); 196 if ( rField_is_long_R(r))nInit_bigint=ngfMapQ;197 else nInit_bigint=ngcMapQ;170 if (nField_is_long_R(r)) r->nInit_bigint=ngfMapQ; 171 else r->nInit_bigint=ngcMapQ; 198 172 } 199 173 #ifdef TEST 200 174 /* -------------- R -----------------------*/ 201 175 //if (c==(-1)) 202 else if (! rField_is_R(r) && !rField_is_Q(r))176 else if (!nField_is_R(r) && !nField_is_Q(r)) 203 177 { 204 178 WerrorS("unknown field"); 205 179 } 206 180 #endif 207 nNormalize=r->cf->nNormalize;208 nPar = r->cf->nPar;209 nParDeg= r->cf->nParDeg;210 n_Int = r->cf->n_Int;211 nAdd = r->cf->nAdd;212 nSub = r->cf->nSub;213 nMult = r->cf->nMult;214 nDiv = r->cf->nDiv;215 nExactDiv= r->cf->nExactDiv;216 nIntDiv= r->cf->nIntDiv;217 nIntMod= r->cf->nIntMod;218 nNeg = r->cf->nNeg;219 nInvers= r->cf->nInvers;220 nCopy = r->cf->nCopy;221 #ifdef HAVE_RINGS222 nDivComp = r->cf->nDivComp;223 nDivBy = r->cf->nDivBy;224 nIsUnit = r->cf->nIsUnit;225 nGetUnit = r->cf->nGetUnit;226 nExtGcd = r->cf->nExtGcd;227 #endif228 nGreater = r->cf->nGreater;229 nEqual = r->cf->nEqual;230 nIsZero = r->cf->nIsZero;231 nIsOne = r->cf->nIsOne;232 nIsMOne = r->cf->nIsMOne;233 nGreaterZero = r->cf->nGreaterZero;234 nRead = r->cf->nRead;235 nPower = r->cf->nPower;236 nGcd = r->cf->nGcd;237 nLcm = r->cf->nLcm;238 nName= r->cf->nName;239 nSize = r->cf->nSize;240 nRePart = r->cf->nRePart;241 nImPart = r->cf->nImPart;242 nNULL=r->cf->nNULL;243 181 } 244 182 245 183 /*2 246 * init operations for ringr184 * init operations for coeffs r 247 185 */ 248 void nInitChar( ringr)186 void nInitChar(coeffs r) 249 187 { 250 int c=rInternalChar(r); 251 252 if (rField_is_Extension(r)) 188 int c=nInternalChar(r); 189 n_coeffType t=nFieldType(r); 190 191 if (nField_is_Extension(r)) 253 192 { 254 193 if (r->algring==NULL) … … 282 221 { 283 222 n->ref++; 284 r ->cf=n;223 r=n; 285 224 return; 286 225 } … … 290 229 return; 291 230 } 292 r ->cf=n;231 r=n; 293 232 n->nChar = c; 294 233 n->nPar = ndPar; … … 313 252 n->nGetUnit = (nMapFunc)NULL; 314 253 #endif 315 if ( rField_is_Extension(r))254 if (nField_is_Extension(r)) 316 255 { 317 256 //naInitChar(c,TRUE,r); … … 354 293 #ifdef HAVE_RINGS 355 294 /* -------------- Z/2^m ----------------------- */ 356 else if ( rField_is_Ring_2toM(r))295 else if (nField_is_Ring_2toM(r)) 357 296 { 358 297 nr2mInitExp(c,r); … … 393 332 } 394 333 /* -------------- Z/n ----------------------- */ 395 else if ( rField_is_Ring_ModN(r) || rField_is_Ring_PtoM(r)334 else if (nField_is_Ring_ModN(r) || nField_is_Ring_PtoM(r) 396 335 ) 397 336 { … … 436 375 } 437 376 /* -------------- Z ----------------------- */ 438 else if ( rField_is_Ring_Z(r))377 else if (nField_is_Ring_Z(r)) 439 378 { 440 379 n->cfInit = nrzInit; … … 477 416 } 478 417 #endif 479 else if ( rField_is_Q(r))418 else if (nField_is_Q(r)) 480 419 { 481 420 n->cfDelete= nlDelete; … … 513 452 #endif 514 453 } 515 else if ( rField_is_Zp(r))454 else if (nField_is_Zp(r)) 516 455 /*----------------------char. p----------------*/ 517 456 { … … 555 494 } 556 495 /* -------------- GF(p^m) -----------------------*/ 557 else if ( rField_is_GF(r))496 else if (nField_is_GF(r)) 558 497 { 559 498 //nfSetChar(c,r->parameter); … … 588 527 /* -------------- R -----------------------*/ 589 528 //if (c==(-1)) 590 else if ( rField_is_R(r))529 else if (nField_is_R(r)) 591 530 { 592 531 n->cfInit = nrInit; … … 617 556 } 618 557 /* -------------- long R -----------------------*/ 619 else if ( rField_is_long_R(r))558 else if (nField_is_long_R(r)) 620 559 { 621 560 n->cfDelete= ngfDelete; … … 647 586 } 648 587 /* -------------- long C -----------------------*/ 649 else if ( rField_is_long_C(r))588 else if (nField_is_long_C(r)) 650 589 { 651 590 n->cfDelete= ngcDelete; … … 692 631 n->nNULL=n->cfInit(0,r); 693 632 if (n->nRePart==NULL) 694 n->nRePart=n-> nCopy;633 n->nRePart=n->cfCopy; 695 634 if (n->nIntDiv==NULL) 696 635 n->nIntDiv=n->nDiv; … … 698 637 } 699 638 700 void nKillChar( ringr)639 void nKillChar(coeffs r) 701 640 { 702 641 if (r!=NULL) 703 642 { 704 if (r->cf!=NULL) 643 r->ref--; 644 if (r->ref<=0) 705 645 { 706 r->cf->ref--; 707 if (r->cf->ref<=0) 646 n_Procs_s tmp; 647 n_Procs_s* n=&tmp; 648 tmp.next=cf_root; 649 while((n->next!=NULL) && (n->next!=r)) n=n->next; 650 if (n->next==r) 708 651 { 709 n_Procs_s tmp; 710 n_Procs_s* n=&tmp; 711 tmp.next=cf_root; 712 while((n->next!=NULL) && (n->next!=r->cf)) n=n->next; 713 if (n->next==r->cf) 652 n->next=n->next->next; 653 if (cf_root==r) cf_root=n->next; 654 r->cfDelete(&(r->nNULL),r); 655 switch(r->type) 714 656 { 715 n->next=n->next->next; 716 if (cf_root==r->cf) cf_root=n->next; 717 r->cf->cfDelete(&(r->cf->nNULL),r); 718 switch(r->cf->type) 719 { 720 case n_Zp: 721 #ifdef HAVE_DIV_MOD 722 if (r->cf->npInvTable!=NULL) 723 omFreeSize( (ADDRESS)r->cf->npInvTable, 724 r->cf->npPrimeM*sizeof(unsigned short) ); 725 #else 726 if (r->cf->npExpTable!=NULL) 657 case n_Zp: 658 #ifdef HAVE_DIV_MOD 659 if (r->npInvTable!=NULL) 660 omFreeSize( (void *)r->npInvTable, 661 r->npPrimeM*sizeof(unsigned short) ); 662 #else 663 if (r->npExpTable!=NULL) 664 { 665 omFreeSize( (void *)r->npExpTable, 666 r->npPrimeM*sizeof(unsigned short) ); 667 omFreeSize( (void *)r->npLogTable, 668 r->npPrimeM*sizeof(unsigned short) ); 669 } 670 #endif 671 break; 672 case n_Zp_a: 673 case n_Q_a: 674 { 675 number n=r->minpoly; 676 if (n!=NULL) 727 677 { 728 omFreeSize( (ADDRESS)r->cf->npExpTable, 729 r->cf->npPrimeM*sizeof(unsigned short) ); 730 omFreeSize( (ADDRESS)r->cf->npLogTable, 731 r->cf->npPrimeM*sizeof(unsigned short) ); 678 r->minpoly=NULL; 679 naDelete(&n,r); 732 680 } 733 #endif 734 break; 735 case n_Zp_a: 736 case n_Q_a: 737 { 738 number n=r->minpoly; 739 if (n!=NULL) 740 { 741 r->minpoly=NULL; 742 if (r==currRing) naMinimalPoly=NULL; 743 naDelete(&n,r); 744 } 745 } 746 break; 681 } 682 break; 747 683 748 684 default: 749 685 break; 750 686 } 751 omFreeSize(( ADDRESS)r->cf, sizeof(n_Procs_s));752 r ->cf=NULL;687 omFreeSize((void *)r, sizeof(n_Procs_s)); 688 r=NULL; 753 689 } 754 690 else … … 759 695 r->cf=NULL; 760 696 } 761 if (r->algring!=NULL)762 {763 rKill(r->algring);764 r->algring=NULL;765 }697 //if (r->algring!=NULL) 698 //{ 699 // rKill(r->algring); 700 // r->algring=NULL; 701 //} 766 702 } 767 703 } -
coeffs/numbers.h
r634d93b r7d90aa 8 8 * ABSTRACT: interface to coefficient aritmetics 9 9 */ 10 #include <kernel/structs.h> 11 12 #define n_Copy(n, r) (r)->cf->cfCopy(n,r) 13 #define n_Delete(n, r) (r)->cf->cfDelete(n,r) 14 #define n_Mult(n1, n2, r) (r)->cf->nMult(n1, n2) 15 #define n_Add(n1, n2, r) (r)->cf->nAdd(n1, n2) 16 #define n_IsZero(n, r) (r)->cf->nIsZero(n) 17 #define n_Equal(n1, n2, r) (r)->cf->nEqual(n1, n2) 18 #define n_Neg(n, r) (r)->cf->nNeg(n) 19 #define n_Sub(n1, n2, r) (r)->cf->nSub(n1, n2) 20 //#define n_GetChar(r) ((r)->cf->nChar) 10 #include "coeffs.h" 11 12 #define SHORT_REAL_LENGTH 6 // use short reals for real <= 6 digits 13 14 #define n_Copy(n, r) (r)->cfCopy(n,r) 15 #define n_Delete(n, r) (r)->cfDelete(n,r) 16 #define n_Mult(n1, n2, r) (r)->nMult(n1, n2,r) 17 #define n_Add(n1, n2, r) (r)->nAdd(n1, n2,r) 18 #define n_IsZero(n, r) (r)->nIsZero(n,r) 19 #define n_Equal(n1, n2, r) (r)->nEqual(n1, n2,r) 20 #define n_Neg(n, r) (r)->nNeg(n,r) 21 #define n_Sub(n1, n2, r) (r)->nSub(n1, n2,r) 21 22 #define n_GetChar(r) ((r)->ch) 22 #define n_Init(i, r) (r)->cf ->cfInit(i,r)23 #define n_IsOne(n, r) (r)-> cf->nIsOne(n)24 #define n_IsMOne(n, r) (r)-> cf->nIsMOne(n)25 #define n_GreaterZero(n, r) (r)-> cf->nGreaterZero(n)26 #define n_Write(n, r) (r)->cf ->cfWrite(n,r)27 #define n_Normalize(n, r) (r)-> cf->nNormalize(n)28 #define n_Gcd(a, b, r) (r)-> cf->nGcd(a,b,r)29 #define n_IntDiv(a, b, r) (r)-> cf->nIntDiv(a,b)30 #define n_Div(a, b, r) (r)-> cf->nDiv(a,b)31 #define n_Invers(a, r) (r)->cf->nInvers(a)32 #define n_ExactDiv(a, b, r) (r)-> cf->nExactDiv(a,b)33 #define n_Test(a,r) (r)-> cf->nDBTest(a,__FILE__,__LINE__)34 35 #define n_InpMult(a, b, r) (r)-> cf->nInpMult(a,b,r)36 #define n_Power(a, b, res, r) (r)-> cf->nPower(a,b,res)37 #define n_Size(n,r) (r)-> cf->nSize(n)38 #define n_GetDenom(N,r) (r)->cf ->cfGetDenom((N),r)39 #define n_GetNumerator(N,r) (r)->cf ->cfGetNumerator((N),r)23 #define n_Init(i, r) (r)->cfInit(i,r) 24 #define n_IsOne(n, r) (r)->nIsOne(n,r) 25 #define n_IsMOne(n, r) (r)->nIsMOne(n,r) 26 #define n_GreaterZero(n, r) (r)->nGreaterZero(n,r) 27 #define n_Write(n, r) (r)->cfWrite(n,r) 28 #define n_Normalize(n, r) (r)->nNormalize(n,r) 29 #define n_Gcd(a, b, r) (r)->nGcd(a,b,r) 30 #define n_IntDiv(a, b, r) (r)->nIntDiv(a,b,r) 31 #define n_Div(a, b, r) (r)->nDiv(a,b,r) 32 #define n_Invers(a, r) (r)->nInvers(a,r) 33 #define n_ExactDiv(a, b, r) (r)->nExactDiv(a,b,r) 34 #define n_Test(a,r) (r)->nDBTest(a,r,__FILE__,__LINE__) 35 36 #define n_InpMult(a, b, r) (r)->nInpMult(a,b,r) 37 #define n_Power(a, b, res, r) (r)->nPower(a,b,res,r) 38 #define n_Size(n,r) (r)->nSize(n,r) 39 #define n_GetDenom(N,r) (r)->cfGetDenom((N),r) 40 #define n_GetNumerator(N,r) (r)->cfGetNumerator((N),r) 40 41 41 42 #define n_New(n, r) nNew(n) … … 45 46 46 47 /* prototypes */ 47 extern numberfunc nMult, nSub ,nAdd ,nDiv, nIntDiv, nIntMod, nExactDiv;48 48 void nNew(number * a); 49 extern number (*nInit_bigint)(number i);50 49 #define nInit(i) n_Init(i,currRing) 51 extern number (*nPar)(int i);52 extern int (*nParDeg)(number n);53 /* size: a measure for the complexity of the represented number n;54 zero should have size zero; larger size means more complex */55 extern int (*nSize)(number n);56 extern int (*n_Int)(number &n, const ring r);57 #ifdef HAVE_RINGS58 extern int (*nDivComp)(number a,number b);59 extern BOOLEAN (*nIsUnit)(number a);60 extern number (*nGetUnit)(number a);61 extern number (*nExtGcd)(number a, number b, number *s, number *t);62 #endif63 // always use in the form n=nNeg(n) !64 extern number (*nNeg)(number a);65 extern number (*nInvers)(number a);66 extern number (*nCopy)(number a);67 extern number (*nRePart)(number a);68 extern number (*nImPart)(number a);69 50 #define nWrite(A) n_Write(A,currRing) 70 extern const char * (*nRead)(const char * s, number * a);71 extern void (*nNormalize)(number &a);72 extern BOOLEAN (*nGreater)(number a,number b),73 #ifdef HAVE_RINGS74 (*nDivBy)(number a,number b),75 #endif76 (*nEqual)(number a,number b),77 (*nIsZero)(number a),78 (*nIsOne)(number a),79 (*nIsMOne)(number a),80 (*nGreaterZero)(number a);81 extern void (*nPower)(number a, int i, number * result);82 extern number (*nGcd)(number a, number b, const ring r);83 extern number (*nLcm)(number a, number b, const ring r);84 85 extern number nNULL; /* the 0 as constant */86 51 87 52 #define nTest(a) (1) … … 91 56 92 57 #define nSetMap(R) (currRing->cf->cfSetMap(R,currRing)) 93 extern char * (*nName)(number n);94 58 95 59 void nDummy1(number* d); 96 void ndDelete(number* d, const ringr);60 void ndDelete(number* d, const coeffs r); 97 61 void nDummy2(number &d); 98 number ndGcd(number a, number b, const ring);99 number ndCopy(number a );100 void ndInpMult(number &a, number b, const ringr);101 number ndInpAdd(number &a, number b, const ringr);62 number ndGcd(number a, number b, const coeffs); 63 number ndCopy(number a, const coeffs r); 64 void ndInpMult(number &a, number b, const coeffs r); 65 number ndInpAdd(number &a, number b, const coeffs r); 102 66 103 67 #ifdef LDEBUG … … 106 70 #define nGetChar() n_GetChar(currRing) 107 71 108 void nInitChar( ringr);109 void nKillChar( ringr);110 void nSetChar( ringr);72 void nInitChar(coeffs r); 73 void nKillChar(coeffs r); 74 void nSetChar(coeffs r); 111 75 112 76 #define nDivBy0 "div by 0" … … 114 78 // dummy routines 115 79 void nDummy2(number& d); // nNormalize... 116 #endif 80 81 // Tests: 82 #ifdef HAVE_RINGS 83 static inline BOOLEAN nField_is_Ring_2toM(const coeffs r) 84 { return (r->ringtype == 1); } 85 86 static inline BOOLEAN nField_is_Ring_ModN(const coeffs r) 87 { return (r->ringtype == 2); } 88 89 static inline BOOLEAN nField_is_Ring_PtoM(const coeffs r) 90 { return (r->ringtype == 3); } 91 92 static inline BOOLEAN nField_is_Ring_Z(const coeffs r) 93 { return (r->ringtype == 4); } 94 95 static inline BOOLEAN nField_is_Ring(const coeffs r) 96 { return (r->ringtype != 0); } 97 98 static inline BOOLEAN nField_is_Domain(const coeffs r) 99 { return (r->ringtype == 4 || r->ringtype == 0); } 100 101 static inline BOOLEAN nField_has_Units(const coeffs r) 102 { return ((r->ringtype == 1) || (r->ringtype == 2) || (r->ringtype == 3)); } 103 #else 104 #define nField_is_Ring(A) (0) 105 #endif 106 107 #ifdef HAVE_RINGS 108 static inline BOOLEAN nField_is_Zp(const coeffs r) 109 { return (r->ringtype == 0) && (r->ch > 1) && (r->parameter==NULL); } 110 111 static inline BOOLEAN nField_is_Zp(const coeffs r, int p) 112 { return (r->ringtype == 0) && (r->ch > 1 && r->ch == ABS(p) && r->parameter==NULL); } 113 114 static inline BOOLEAN nField_is_Q(const coeffs r) 115 { return (r->ringtype == 0) && (r->ch == 0) && (r->parameter==NULL); } 116 117 static inline BOOLEAN nField_is_numeric(const coeffs r) /* R, long R, long C */ 118 { return (r->ringtype == 0) && (r->ch == -1); } 119 120 static inline BOOLEAN nField_is_R(const coeffs r) 121 { 122 if (nField_is_numeric(r) && (r->float_len <= (short)SHORT_REAL_LENGTH)) 123 return (r->ringtype == 0) && (r->parameter==NULL); 124 return FALSE; 125 } 126 127 static inline BOOLEAN nField_is_GF(const coeffs r) 128 { return (r->ringtype == 0) && (r->ch > 1) && (r->parameter!=NULL); } 129 130 static inline BOOLEAN nField_is_GF(const coeffs r, int q) 131 { return (r->ringtype == 0) && (r->ch == q); } 132 133 static inline BOOLEAN nField_is_Zp_a(const coeffs r) 134 { return (r->ringtype == 0) && (r->ch < -1); } 135 136 static inline BOOLEAN nField_is_Zp_a(const coeffs r, int p) 137 { return (r->ringtype == 0) && (r->ch < -1 ) && (-(r->ch) == ABS(p)); } 138 139 static inline BOOLEAN nField_is_Q_a(const coeffs r) 140 { return (r->ringtype == 0) && (r->ch == 1); } 141 142 static inline BOOLEAN nField_is_long_R(const coeffs r) 143 { 144 if (nField_is_numeric(r) && (r->float_len >(short)SHORT_REAL_LENGTH)) 145 return (r->ringtype == 0) && (r->parameter==NULL); 146 return FALSE; 147 } 148 149 static inline BOOLEAN nField_is_long_C(const coeffs r) 150 { 151 if (nField_is_numeric(r)) 152 return (r->ringtype == 0) && (r->parameter!=NULL); 153 return FALSE; 154 } 155 #else 156 static inline BOOLEAN nField_is_Zp(const coeffs r) 157 { return (r->ch > 1) && (r->parameter==NULL); } 158 159 static inline BOOLEAN nField_is_Zp(const coeffs r, int p) 160 { return (r->ch > 1 && r->ch == ABS(p) && r->parameter==NULL); } 161 162 static inline BOOLEAN nField_is_Q(const coeffs r) 163 { return (r->ch == 0) && (r->parameter==NULL); } 164 165 static inline BOOLEAN nField_is_numeric(const coeffs r) /* R, long R, long C */ 166 { return (r->ch == -1); } 167 168 static inline BOOLEAN nField_is_R(const coeffs r) 169 { 170 if (nField_is_numeric(r) && (r->float_len <= (short)SHORT_REAL_LENGTH)) 171 return (r->parameter==NULL); 172 return FALSE; 173 } 174 175 static inline BOOLEAN nField_is_GF(const coeffs r) 176 { return (r->ch > 1) && (r->parameter!=NULL); } 177 178 static inline BOOLEAN nField_is_GF(const coeffs r, int q) 179 { return (r->ch == q); } 180 181 static inline BOOLEAN nField_is_Zp_a(const coeffs r) 182 { return (r->ch < -1); } 183 184 static inline BOOLEAN nField_is_Zp_a(const coeffs r, int p) 185 { return (r->ch < -1 ) && (-(r->ch) == ABS(p)); } 186 187 static inline BOOLEAN nField_is_Q_a(const coeffs r) 188 { return (r->ch == 1); } 189 190 static inline BOOLEAN nField_is_long_R(const coeffs r) 191 { 192 if (nField_is_numeric(r) && (r->float_len >(short)SHORT_REAL_LENGTH)) 193 return (r->parameter==NULL); 194 return FALSE; 195 } 196 197 static inline BOOLEAN nField_is_long_C(const coeffs r) 198 { 199 if (nField_is_numeric(r)) 200 return (r->parameter!=NULL); 201 return FALSE; 202 } 203 #endif 204 205 static inline BOOLEAN nField_has_simple_inverse(const coeffs r) 206 /* { return (r->ch>1) || (r->ch== -1); } *//* Z/p, GF(p,n), R, long_R, long_C*/ 207 #ifdef HAVE_RINGS 208 { return (r->ringtype > 0) || (r->ch>1) || ((r->ch== -1) && (r->float_len < 10)); } /* Z/2^n, Z/p, GF(p,n), R, long_R, long_C*/ 209 #else 210 { return (r->ch>1) || ((r->ch== -1) && (r->float_len < 10)); } /* Z/p, GF(p,n), R, long_R, long_C*/ 211 #endif 212 213 static inline BOOLEAN nField_has_simple_Alloc(const coeffs r) 214 { return (nField_is_Zp(r) 215 || nField_is_GF(r) 216 #ifdef HAVE_RINGS 217 || nField_is_Ring_2toM(r) 218 #endif 219 || nField_is_R(r)); 220 } 221 /* Z/p, GF(p,n), R: nCopy, nNew, nDelete are dummies*/ 222 223 static inline BOOLEAN nField_is_Extension(const coeffs r) 224 { return (nField_is_Q_a(r)) || (nField_is_Zp_a(r)); } /* Z/p(a) and Q(a)*/ 225 226 #endif -
coeffs/rmodulo2m.cc
r634d93b r7d90aa 556 556 { 557 557 mpz_clear(modul); 558 omFree(( ADDRESS) modul);558 omFree((void *) modul); 559 559 return nr2mMapGMP; 560 560 } 561 561 mpz_clear(modul); 562 omFree(( ADDRESS) modul);562 omFree((void *) modul); 563 563 } 564 564 return NULL; // default -
coeffs/rmodulo2m.h
r634d93b r7d90aa 9 9 */ 10 10 #ifdef HAVE_RINGS 11 #include <kernel/structs.h>11 #include "coeffs.h" 12 12 13 13 extern int nr2mExp; -
coeffs/rmodulon.cc
r634d93b r7d90aa 41 41 if (*a == NULL) return; 42 42 mpz_clear((int_number) *a); 43 omFreeBin(( ADDRESS) *a, gmp_nrz_bin);43 omFreeBin((void *) *a, gmp_nrz_bin); 44 44 *a = NULL; 45 45 } -
coeffs/rmodulon.h
r634d93b r7d90aa 9 9 */ 10 10 #ifdef HAVE_RINGS 11 #include <kernel/structs.h>11 #include "coeffs.h" 12 12 13 13 #ifndef NATNUMBER -
coeffs/shortfl.cc
r634d93b r7d90aa 9 9 10 10 #include <string.h> 11 #include <kernel/mod2.h> 12 #include <omalloc/mylimits.h> 13 #include <kernel/structs.h> 14 #include <kernel/febase.h> 15 #include <kernel/numbers.h> 16 #include <kernel/longrat.h> 17 #include <kernel/mpr_complex.h> 18 #include <kernel/ring.h> 19 #include <kernel/shortfl.h> 11 #include "coeffs.h" 12 #include <mylimits.h> 13 #include "febase.h" 14 #include "numbers.h" 15 #include "longrat.h" 16 #include "mpr_complex.h" 17 #include "shortfl.h" 20 18 21 19 static float nrEps = 1.0e-3; … … 35 33 } 36 34 37 BOOLEAN nrGreaterZero (number k )35 BOOLEAN nrGreaterZero (number k, const coeffs r) 38 36 { 39 37 return nf(k).F() >= 0.0; 40 38 } 41 39 42 number nrMult (number a,number b )40 number nrMult (number a,number b, const coeffs r) 43 41 { 44 42 return nf(nf(a).F() * nf(b).F()).N(); … … 48 46 * create a number from int 49 47 */ 50 number nrInit (int i, const ringR)48 number nrInit (int i, const coeffs R) 51 49 { 52 50 float r = (float)i; … … 57 55 * convert a number to int 58 56 */ 59 int nrInt(number &n, const ringR)57 int nrInt(number &n, const coeffs R) 60 58 { 61 59 int i; … … 68 66 } 69 67 70 int nrSize(number n )68 int nrSize(number n, const coeffs R) 71 69 { 72 70 float f = nf(n).F(); … … 80 78 } 81 79 82 number nrAdd (number a, number b )80 number nrAdd (number a, number b, const coeffs R) 83 81 { 84 82 float x = nf(a).F(); … … 110 108 } 111 109 112 number nrSub (number a, number b )110 number nrSub (number a, number b, const coeffs R) 113 111 { 114 112 float x = nf(a).F(); … … 140 138 } 141 139 142 BOOLEAN nrIsZero (number a )140 BOOLEAN nrIsZero (number a, const coeffs r) 143 141 { 144 142 return (0.0 == nf(a).F()); 145 143 } 146 144 147 BOOLEAN nrIsOne (number a )145 BOOLEAN nrIsOne (number a, const coeffs r) 148 146 { 149 147 float aa=nf(a).F()-1.0; … … 152 150 } 153 151 154 BOOLEAN nrIsMOne (number a )152 BOOLEAN nrIsMOne (number a, const coeffs r) 155 153 { 156 154 float aa=nf(a).F()+1.0; … … 159 157 } 160 158 161 number nrDiv (number a,number b )159 number nrDiv (number a,number b, const coeffs r) 162 160 { 163 161 float n = nf(b).F(); … … 171 169 } 172 170 173 number nrInvers (number c )171 number nrInvers (number c, const coeffs r) 174 172 { 175 173 float n = nf(c).F(); … … 182 180 } 183 181 184 number nrNeg (number c )182 number nrNeg (number c, const coeffs r) 185 183 { 186 184 return nf(-nf(c).F()).N(); 187 185 } 188 186 189 BOOLEAN nrGreater (number a,number b )187 BOOLEAN nrGreater (number a,number b, const coeffs r) 190 188 { 191 189 return nf(a).F() > nf(b).F(); 192 190 } 193 191 194 BOOLEAN nrEqual (number a,number b )195 { 196 number x = nrSub(a,b );192 BOOLEAN nrEqual (number a,number b, const coeffs r) 193 { 194 number x = nrSub(a,b,r); 197 195 return nf(x).F() == nf((float)0.0).F(); 198 196 } 199 197 200 void nrWrite (number &a, const ringr)198 void nrWrite (number &a, const coeffs r) 201 199 { 202 200 StringAppend("%9.3e", nf(a).F()); 203 201 } 204 202 205 void nrPower (number a, int i, number * result )203 void nrPower (number a, int i, number * result, const coeffs r) 206 204 { 207 205 if (i==0) … … 215 213 return; 216 214 } 217 nrPower(a,i-1,result );215 nrPower(a,i-1,result,r); 218 216 *result = nf(nf(a).F() * nf(*result).F()).N(); 219 217 } … … 240 238 const char *nIllegalChar="illegal character in number"; 241 239 242 const char * nrRead (const char *s, number *a )240 const char * nrRead (const char *s, number *a, const coeffs r) 243 241 { 244 242 const char *t; … … 425 423 } 426 424 427 static number nrMapP(number from )425 static number nrMapP(number from, const coeffs R) 428 426 { 429 427 int i = (int)((long)from); … … 432 430 } 433 431 434 static number nrMapLongR(number from )432 static number nrMapLongR(number from, const coeffs R) 435 433 { 436 434 float t =(float)mpf_get_d((mpf_srcptr)from); 437 435 return nf(t).N(); 438 436 } 439 static number nrMapC(number from )437 static number nrMapC(number from, const coeffs r) 440 438 { 441 439 gmp_float h = ((gmp_complex*)from)->real(); … … 444 442 } 445 443 446 nMapFunc nrSetMap(const ring src, const ringdst)447 { 448 if ( rField_is_Q(src))444 nMapFunc nrSetMap(const coeffs src, const coeffs dst) 445 { 446 if (nField_is_Q(src)) 449 447 { 450 448 return nrMapQ; 451 449 } 452 if ( rField_is_long_R(src))450 if (nField_is_long_R(src)) 453 451 { 454 452 return nrMapLongR; 455 453 } 456 if ( rField_is_R(src))454 if (nField_is_R(src)) 457 455 { 458 456 return ndCopy; 459 457 } 460 if( rField_is_Zp(src))458 if(nField_is_Zp(src)) 461 459 { 462 460 return nrMapP; 463 461 } 464 if ( rField_is_long_C(src))462 if (nField_is_long_C(src)) 465 463 { 466 464 return nrMapC; -
coeffs/shortfl.h
r634d93b r7d90aa 8 8 */ 9 9 /* $Id$ */ 10 #include <kernel/structs.h>10 #include "coeffs.h" 11 11 12 BOOLEAN nrGreaterZero (number k); 13 number nrMult (number a, number b); 14 number nrInit (int i, const ring r); 15 int nrInt (number &n, const ring r); 16 number nrAdd (number a, number b); 17 number nrSub (number a, number b); 18 void nrPower (number a, int i, number * result); 19 BOOLEAN nrIsZero (number a); 20 BOOLEAN nrIsOne (number a); 21 BOOLEAN nrIsMOne (number a); 22 number nrDiv (number a, number b); 23 number nrNeg (number c); 24 number nrInvers (number c); 25 int nrSize (number n); 26 BOOLEAN nrGreater (number a, number b); 27 BOOLEAN nrEqual (number a, number b); 28 void nrWrite (number &a, const ring r); 29 const char * nrRead (const char *s, number *a); 12 BOOLEAN nrGreaterZero (number k, const coeffs r); 13 number nrMult (number a, number b, const coeffs r); 14 number nrInit (int i, const coeffs r); 15 int nrInt (number &n, const coeffs r); 16 number nrAdd (number a, number b, const coeffs r); 17 number nrSub (number a, number b, const coeffs r); 18 void nrPower (number a, int i, number * result, const coeffs r); 19 BOOLEAN nrIsZero (number a, const coeffs r); 20 BOOLEAN nrIsOne (number a, const coeffs r); 21 BOOLEAN nrIsMOne (number a, const coeffs r); 22 number nrDiv (number a, number b, const coeffs r); 23 number nrNeg (number c, const coeffs r); 24 number nrInvers (number c, const coeffs r); 25 BOOLEAN nrGreater (number a, number b, const coeffs r); 26 BOOLEAN nrEqual (number a, number b, const coeffs r); 27 void nrWrite (number &a, const coeffs r); 28 const char * nrRead (const char *s, number *a, const coeffs r); 30 29 int nrGetChar(); 31 30 #ifdef LDEBUG 32 BOOLEAN nrDBTest(number a, const c har *f, const int l);31 BOOLEAN nrDBTest(number a, const coeffs, rconst char *f, const int l); 33 32 #endif 34 33 35 nMapFunc nrSetMap(const ring src, const ringdst);34 nMapFunc nrSetMap(const coeffs src, const coeffs dst); 36 35 37 36 float nrFloat(number n); 38 number nrMapQ(number from );37 number nrMapQ(number from, const coeffs r); 39 38 #endif 40 39
Note: See TracChangeset
for help on using the changeset viewer.