Changeset a642c64 in git
- Timestamp:
- Apr 30, 2010, 4:10:10 PM (13 years ago)
- Branches:
- (u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
- Children:
- 88e67079e82b521877fc5e0cb96a457cd3b458dc
- Parents:
- 6ce7579378e276236fc3dfffd7b704449b1e306a
- git-author:
- Christian Eder <ederc@wawa.mathematik.uni-kl.de>2010-04-30 16:10:10+02:00
- git-committer:
- Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2011-11-09 11:50:24+01:00
- Files:
-
- 6 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
coeffs/config.h.in
r6ce757 ra642c64 1 #define assume(x) ((void) 0) 2 #define memcpy4 memcpy -
coeffs/longrat.cc
r6ce757 ra642c64 46 46 #include <float.h> 47 47 #include "coeffs.h" 48 #include "output.h" 48 49 #include "omalloc.h" 49 50 #include "numbers.h" … … 139 140 #endif 140 141 141 static ringnlMapRing;142 static number nlMapP(number from )142 static coeffs nlMapRing; 143 static number nlMapP(number from, const coeffs r) 143 144 { 144 145 number to; 145 to = nlInit(npInt(from,nlMapRing), currRing);146 to = nlInit(npInt(from,nlMapRing), r); 146 147 return to; 147 148 } 148 149 149 static number nlMapLongR(number from );150 static number nlMapR(number from );150 static number nlMapLongR(number from, const coeffs r); 151 static number nlMapR(number from, const coeffs r); 151 152 152 153 #ifdef HAVE_RINGS … … 183 184 #endif 184 185 185 nMapFunc nlSetMap(const ring src, const ringdst)186 nMapFunc nlSetMap(const coeffs src, const coeffs dst) 186 187 { 187 188 if (rField_is_Q(src)) … … 296 297 number nlRInit (long i); 297 298 298 static number nlMapR(number from )299 static number nlMapR(number from, const coeffs r) 299 300 { 300 301 double f=nrFloat(from); … … 315 316 i++; 316 317 } 317 number r =nlRInit(1);318 mpz_set_d( r->z,f);319 memcpy(&(r ->n),&h1,sizeof(h1));320 r ->s=0; /* not normalized */321 if(f_sign==-1) r =nlNeg(r);322 nlNormalize(r );323 return r ;324 } 325 326 static number nlMapLongR(number from )318 number re=nlRInit(1); 319 mpz_set_d(&(re->z),f); 320 memcpy(&(re->n),&h1,sizeof(h1)); 321 re->s=0; /* not normalized */ 322 if(f_sign==-1) re=nlNeg(re,r); 323 nlNormalize(re,r); 324 return re; 325 } 326 327 static number nlMapLongR(number from, const coeffs r) 327 328 { 328 329 gmp_float *ff=(gmp_float*)from; … … 389 390 390 391 if (res->s==0) 391 nlNormalize(res );392 else 392 nlNormalize(res,r); 393 else if (mpz_size1(&res->z)<=MP_SMALL) 393 394 { 394 395 // res is new, res->ref is 1 … … 464 465 //} 465 466 466 int nlSize(number a )467 int nlSize(number a, const coeffs r) 467 468 { 468 469 if (a==INT_TO_SR(0)) … … 493 494 * convert number to int 494 495 */ 495 int nlInt(number &i, const ringr)496 int nlInt(number &i, const coeffs r) 496 497 { 497 498 nlTest(i); 498 nlNormalize(i );499 nlNormalize(i,r); 499 500 if (SR_HDL(i) &SR_INT) return SR_TO_INT(i); 500 501 if (i->s==3) … … 522 523 * convert number to bigint 523 524 */ 524 number nlBigInt(number &i )525 number nlBigInt(number &i, const coeffs r) 525 526 { 526 527 nlTest(i); 527 nlNormalize(i );528 nlNormalize(i,r); 528 529 if (SR_HDL(i) &SR_INT) return (i); 529 530 if (i->s==3) 530 531 { 531 return nlCopy(i );532 return nlCopy(i,r); 532 533 } 533 534 number tmp=nlRInit(1); … … 540 541 * 1/a 541 542 */ 542 number nlInvers(number a )543 number nlInvers(number a, const coeffs r) 543 544 { 544 545 nlTest(a); … … 550 551 return a; 551 552 } 552 if (nlIsZero(a ))553 if (nlIsZero(a,r)) 553 554 { 554 555 WerrorS(nDivBy0); … … 736 737 * u := a mod b in Z, u>=0 737 738 */ 738 number nlIntMod (number a, number b )739 number nlIntMod (number a, number b, const coeffs r) 739 740 { 740 741 if (b==INT_TO_SR(0)) … … 777 778 { 778 779 if (mpz_isNeg(b->z)) 779 return nlSub(a,b );780 return nlSub(a,b,r); 780 781 /*else*/ 781 return nlAdd(a,b );782 return nlAdd(a,b,r); 782 783 } 783 784 /*else*/ … … 820 821 * u := a / b 821 822 */ 822 number nlDiv (number a, number b )823 number nlDiv (number a, number b, const coeffs r) 823 824 { 824 825 number u; 825 if (nlIsZero(b ))826 if (nlIsZero(b,r)) 826 827 { 827 828 WerrorS(nDivBy0); … … 926 927 * u:= x ^ exp 927 928 */ 928 void nlPower (number x,int exp,number * u )929 void nlPower (number x,int exp,number * u, const coeffs r) 929 930 { 930 931 *u = INT_TO_SR(0); // 0^e, e!=0 931 if (!nlIsZero(x ))932 if (!nlIsZero(x,r)) 932 933 { 933 934 nlTest(x); … … 939 940 } 940 941 else if (x->s==0) 941 nlNormalize(x );942 nlNormalize(x,r); 942 943 *u=ALLOC_RNUMBER(); 943 944 #if defined(LDEBUG) … … 989 990 * a > b ? 990 991 */ 991 BOOLEAN nlGreater (number a, number b )992 BOOLEAN nlGreater (number a, number b, const coeffs r) 992 993 { 993 994 nlTest(a); 994 995 nlTest(b); 995 number r ;996 number re; 996 997 BOOLEAN rr; 997 r =nlSub(a,b);998 rr=(!nlIsZero(r )) && (nlGreaterZero(r));999 nlDelete(&r ,currRing);998 re=nlSub(a,b,r); 999 rr=(!nlIsZero(re,r)) && (nlGreaterZero(re,r)); 1000 nlDelete(&re,r); 1000 1001 return rr; 1001 1002 } … … 1018 1019 * result =gcd(a,b) 1019 1020 */ 1020 number nlGcd(number a, number b, const ringr)1021 number nlGcd(number a, number b, const coeffs r) 1021 1022 { 1022 1023 number result; … … 1029 1030 return INT_TO_SR(1L); 1030 1031 if (a==INT_TO_SR(0)) /* gcd(0,b) ->b */ 1031 return nlCopy(b );1032 return nlCopy(b,r); 1032 1033 if (b==INT_TO_SR(0)) /* gcd(a,0) -> a */ 1033 return nlCopy(a );1034 return nlCopy(a,r); 1034 1035 if (SR_HDL(a) & SR_HDL(b) & SR_INT) 1035 1036 { … … 1113 1114 * simplify x 1114 1115 */ 1115 void nlNormalize (number &x )1116 void nlNormalize (number &x, const coeffs r) 1116 1117 { 1117 1118 if ((SR_HDL(x) & SR_INT) ||(x==NULL)) … … 1162 1163 * returns in result->z the lcm(a->z,b->n) 1163 1164 */ 1164 number nlLcm(number a, number b, const ringr)1165 number nlLcm(number a, number b, const coeffs r) 1165 1166 { 1166 1167 number result; … … 1171 1172 { 1172 1173 // b is 1/(b->n) => b->n is 1 => result is a 1173 return nlCopy(a );1174 return nlCopy(a,r); 1174 1175 } 1175 1176 result=ALLOC_RNUMBER(); … … 1207 1208 } 1208 1209 1209 int nlModP(number n, int p )1210 int nlModP(number n, int p, const coeffs r) 1210 1211 { 1211 1212 if (SR_HDL(n) & SR_INT) … … 1221 1222 #ifdef NV_OPS 1222 1223 if (npPrimeM>NV_MAX_PRIME) 1223 return (int)((long)nvDiv((number)iz,(number)in ));1224 return (int)((long)nvDiv((number)iz,(number)in,(const coeffs)r)); 1224 1225 #endif 1225 return (int)((long)npDiv((number)iz,(number)in ));1226 return (int)((long)npDiv((number)iz,(number)in,(const coeffs)r)); 1226 1227 } 1227 1228 return iz; … … 1253 1254 * acces to denominator, other 1 for integers 1254 1255 */ 1255 number nlGetDenom(number &n, const ringr)1256 number nlGetDenom(number &n, const coeffs r) 1256 1257 { 1257 1258 if (!(SR_HDL(n) & SR_INT)) … … 1259 1260 if (n->s==0) 1260 1261 { 1261 nlNormalize(n );1262 nlNormalize(n,r); 1262 1263 } 1263 1264 if (!(SR_HDL(n) & SR_INT)) … … 1282 1283 * acces to Nominator, nlCopy(n) for integers 1283 1284 */ 1284 number nlGetNumerator(number &n, const ringr)1285 number nlGetNumerator(number &n, const coeffs r) 1285 1286 { 1286 1287 if (!(SR_HDL(n) & SR_INT)) … … 1288 1289 if (n->s==0) 1289 1290 { 1290 nlNormalize(n );1291 nlNormalize(n,r); 1291 1292 } 1292 1293 if (!(SR_HDL(n) & SR_INT)) … … 1938 1939 * z := i/j 1939 1940 */ 1940 number nlInit2 (int i, int j )1941 number nlInit2 (int i, int j, const coeffs r) 1941 1942 { 1942 1943 number z=ALLOC_RNUMBER(); … … 1947 1948 mpz_init_set_si(z->n,(long)j); 1948 1949 z->s = 0; 1949 nlNormalize(z );1950 nlNormalize(z,r); 1950 1951 return z; 1951 1952 } 1952 1953 1953 number nlInit2gmp (mpz_t i, mpz_t j )1954 number nlInit2gmp (mpz_t i, mpz_t j, const coeffs r) 1954 1955 { 1955 1956 number z=ALLOC_RNUMBER(); … … 1960 1961 mpz_init_set(z->n,j); 1961 1962 z->s = 0; 1962 nlNormalize(z );1963 nlNormalize(z,r); 1963 1964 return z; 1964 1965 } … … 2000 2001 2001 2002 2002 LINLINE number nlInit (int i, const ringr)2003 LINLINE number nlInit (int i, const coeffs r) 2003 2004 { 2004 2005 number n; … … 2023 2024 } 2024 2025 2025 LINLINE BOOLEAN nlIsZero (number a )2026 LINLINE BOOLEAN nlIsZero (number a, const coeffs r) 2026 2027 { 2027 2028 return (a==INT_TO_SR(0)); … … 2032 2033 * copy a to b 2033 2034 */ 2034 LINLINE number nlCopy(number a )2035 LINLINE number nlCopy(number a, const coeffs r) 2035 2036 { 2036 2037 if ((SR_HDL(a) & SR_INT)||(a==NULL)) … … 2045 2046 * delete a 2046 2047 */ 2047 LINLINE void nlDelete (number * a, const ringr)2048 LINLINE void nlDelete (number * a, const coeffs r) 2048 2049 { 2049 2050 if (*a!=NULL) … … 2061 2062 * za:= - za 2062 2063 */ 2063 LINLINE number nlNeg (number a )2064 LINLINE number nlNeg (number a, const coeffs r) 2064 2065 { 2065 2066 nlTest(a); … … 2077 2078 * u:= a + b 2078 2079 */ 2079 LINLINE number nlAdd (number a, number b )2080 LINLINE number nlAdd (number a, number b, const coeffs r) 2080 2081 { 2081 2082 number u; … … 2094 2095 number nlShort3_noinline(number x); 2095 2096 2096 LINLINE number nlInpAdd (number a, number b, const ringr)2097 LINLINE number nlInpAdd (number a, number b, const coeffs r) 2097 2098 { 2098 2099 if (SR_HDL(a) & SR_HDL(b) & SR_INT) … … 2245 2246 } 2246 2247 2247 LINLINE number nlMult (number a, number b )2248 LINLINE number nlMult (number a, number b, const coeffs r) 2248 2249 { 2249 2250 nlTest(a); … … 2270 2271 * u:= a - b 2271 2272 */ 2272 LINLINE number nlSub (number a, number b )2273 LINLINE number nlSub (number a, number b, const coeffs r) 2273 2274 { 2274 2275 if (SR_HDL(a) & SR_HDL(b) & SR_INT) … … 2285 2286 } 2286 2287 2287 LINLINE void nlInpMult(number &a, number b, const ringr)2288 LINLINE void nlInpMult(number &a, number b, const coeffs r) 2288 2289 { 2289 2290 number aa=a; 2290 2291 if (((SR_HDL(b)|SR_HDL(aa))&SR_INT)) 2291 2292 { 2292 number n=nlMult(aa,b );2293 number n=nlMult(aa,b,r); 2293 2294 nlDelete(&a,r); 2294 2295 a=n; … … 2319 2320 #ifndef P_NUMBERS_H 2320 2321 2321 void nlInpGcd(number &a, number b, const ringr)2322 void nlInpGcd(number &a, number b, const coeffs r) 2322 2323 { 2323 2324 if ((SR_HDL(b)|SR_HDL(a))&SR_INT) … … 2333 2334 } 2334 2335 } 2335 void nlInpIntDiv(number &a, number b, const ringr)2336 void nlInpIntDiv(number &a, number b, const coeffs r) 2336 2337 { 2337 2338 if ((SR_HDL(b)|SR_HDL(a))&SR_INT) … … 2372 2373 } 2373 2374 2374 number nlFarey(number nN, number nP )2375 number nlFarey(number nN, number nP, const coeffs r) 2375 2376 { 2376 2377 mpz_t tmp; mpz_init(tmp); … … 2407 2408 mpz_init_set(z->n,B); 2408 2409 z->s = 0; 2409 nlNormalize(z );2410 nlNormalize(z,r); 2410 2411 break; 2411 2412 } -
coeffs/longrat.h
r6ce757 ra642c64 9 9 */ 10 10 #include "coeffs.h" 11 11 #include "config.h" 12 12 #include "si_gmp.h" 13 13 … … 51 51 LINLINE BOOLEAN nlIsOne(number a, const coeffs r); 52 52 LINLINE BOOLEAN nlIsZero(number za, const coeffs r); 53 LINLINE number nlCopy(number a );53 LINLINE number nlCopy(number a, const coeffs r); 54 54 LINLINE number nl_Copy(number a, const coeffs r); 55 55 LINLINE void nlDelete(number *a, const coeffs r); … … 59 59 LINLINE number nlMult(number a, number b, const coeffs r); 60 60 61 number nlInit2 (int i, int j );61 number nlInit2 (int i, int j, const coeffs r); 62 62 number nlInit2gmp (mpz_t i, mpz_t j); 63 63 number nlGcd(number a, number b, const coeffs r); -
coeffs/longrat0.cc
r6ce757 ra642c64 10 10 #include <stdio.h> 11 11 #include <string.h> 12 #include "output.h" 12 13 #include "config.h" 13 14 #include "coeffs.h" 15 #include "utils.h" 14 16 #include "omalloc.h" 15 #include "output.h"16 17 #include "longrat.h" 17 18 #include "numbers.h" … … 98 99 { 99 100 number aa=*a; 100 nlNormalize(aa );101 nlNormalize(aa,r); 101 102 *a=aa; 102 103 }
Note: See TracChangeset
for help on using the changeset viewer.