Changeset 54bb6b in git
- Timestamp:
- Jul 3, 2018, 5:23:27 PM (5 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- acb07ec581d8593b7eb367dd1cbd785808f4ae86
- Parents:
- 417a91a95b5bf03f8ca333971553909c72f2568f
- Location:
- libpolys/coeffs
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
libpolys/coeffs/rintegers.cc
r417a91a r54bb6b 135 135 static void nrzDelete(number *a, const coeffs) 136 136 { 137 if (*a == NULL) return; 138 mpz_clear((mpz_ptr) *a); 139 omFreeBin((ADDRESS) *a, gmp_nrz_bin); 140 *a = NULL; 137 if (*a != NULL) 138 { 139 mpz_clear((mpz_ptr) *a); 140 omFreeBin((ADDRESS) *a, gmp_nrz_bin); 141 *a = NULL; 142 } 141 143 } 142 144 … … 158 160 static int nrzSize(number a, const coeffs) 159 161 { 160 if (a == NULL) return 0; 161 return (((mpz_ptr)a)->_mp_alloc); 162 mpz_ptr p=(mpz_ptr)a; 163 int s=p->_mp_alloc; 164 if (s==1) s=(mpz_cmp_ui(p,0)!=0); 165 return s; 166 162 167 } 163 168 … … 203 208 static BOOLEAN nrzIsOne (number a, const coeffs) 204 209 { 205 return ( a!=NULL) && (0 == mpz_cmp_ui((mpz_ptr) a, 1));210 return (0 == mpz_cmp_ui((mpz_ptr) a, 1)); 206 211 } 207 212 208 213 static BOOLEAN nrzIsMOne (number a, const coeffs) 209 214 { 210 return ( a!=NULL) && (0 == mpz_cmp_si((mpz_ptr) a, -1));215 return (0 == mpz_cmp_si((mpz_ptr) a, -1)); 211 216 } 212 217 … … 303 308 { 304 309 WerrorS("Non invertible element."); 305 return (number) 0; //TODO310 return (number)NULL; 306 311 } 307 312 return nrzCopy(c,r); … … 685 690 static int nrzSize(number a, const coeffs) 686 691 { 687 if (a == NULL) return 0;688 692 if (a==INT_TO_SR(0)) return 0; 689 693 if (n_Z_IS_SMALL(a)) return 1; … … 717 721 #endif 718 722 { 719 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) { 723 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 724 { 720 725 //from longrat.cc 721 726 if (SR_TO_INT(a)==0) … … 1315 1320 static BOOLEAN nrzIsZero (number a, const coeffs) 1316 1321 { 1317 return (a== NULL) || (a==INT_TO_SR(0));1322 return (a==INT_TO_SR(0)); 1318 1323 } 1319 1324 … … 1483 1488 { 1484 1489 WerrorS("Non invertible element."); 1485 return (number) 0; //TODO1490 return (number)NULL; 1486 1491 } 1487 1492 return c; // has to be 1 or -1.... -
libpolys/coeffs/rmodulon.cc
r417a91a r54bb6b 164 164 static void nrnDelete(number *a, const coeffs) 165 165 { 166 if (*a == NULL) return; 167 mpz_clear((mpz_ptr) *a); 168 omFreeBin((void *) *a, gmp_nrz_bin); 169 *a = NULL; 166 if (*a != NULL) 167 { 168 mpz_clear((mpz_ptr) *a); 169 omFreeBin((void *) *a, gmp_nrz_bin); 170 *a = NULL; 171 } 170 172 } 171 173 172 174 static int nrnSize(number a, const coeffs) 173 175 { 174 if (a == NULL) return 0;175 176 mpz_ptr p=(mpz_ptr)a; 176 177 int s=p->_mp_alloc; 178 if (s==1) s=(mpz_cmp_ui(p,0)!=0); 177 179 return s; 178 180 } … … 226 228 static BOOLEAN nrnIsZero(number a, const coeffs) 227 229 { 228 #ifdef LDEBUG229 if (a == NULL) return FALSE;230 #endif231 230 return 0 == mpz_cmpabs_ui((mpz_ptr)a, 0); 232 231 } … … 251 250 * Give the largest k, such that a = x * k, b = y * k has 252 251 * a solution. 252 * a may be NULL, b not 253 253 */ 254 254 static number nrnGcd(number a, number b, const coeffs r) 255 255 { 256 if ((a == NULL) && (b == NULL)) return nrnInit(0,r);257 256 mpz_ptr erg = (mpz_ptr)omAllocBin(gmp_nrz_bin); 258 257 mpz_init_set(erg, r->modNumber); 259 258 if (a != NULL) mpz_gcd(erg, erg, (mpz_ptr)a); 260 if (b != NULL)mpz_gcd(erg, erg, (mpz_ptr)b);259 mpz_gcd(erg, erg, (mpz_ptr)b); 261 260 if(mpz_cmp(erg,r->modNumber)==0) 262 261 { … … 323 322 static BOOLEAN nrnIsOne(number a, const coeffs) 324 323 { 325 #ifdef LDEBUG326 if (a == NULL) return FALSE;327 #endif328 324 return 0 == mpz_cmp_si((mpz_ptr)a, 1); 329 325 } … … 338 334 if (mpz_divisible_p(r->modNumber, (mpz_ptr)k)) return nrnInit(1,r); 339 335 340 mpz_ptr unit = (mpz_ptr)nrnGcd( k, 0, r);336 mpz_ptr unit = (mpz_ptr)nrnGcd(NULL, k, r); 341 337 mpz_tdiv_q(unit, (mpz_ptr)k, unit); 342 mpz_ptr gcd = (mpz_ptr)nrnGcd( (number)unit, 0, r);338 mpz_ptr gcd = (mpz_ptr)nrnGcd(NULL, (number)unit, r); 343 339 if (!nrnIsOne((number)gcd,r)) 344 340 { … … 347 343 mpz_ptr tmp = (mpz_ptr) nrnMult((number) unit,(number) unit,r); 348 344 // gcd_new := gcd(tmp, 0) 349 mpz_ptr gcd_new = (mpz_ptr) nrnGcd( (number) tmp, 0, r);345 mpz_ptr gcd_new = (mpz_ptr) nrnGcd(NULL, (number) tmp, r); 350 346 while (!nrnEqual((number) gcd_new,(number) gcd,r)) 351 347 { … … 364 360 mpz_add(unit, unit, tmp); 365 361 mpz_mod(unit, unit, r->modNumber); 366 nrnDelete((number*) &gcd_new, NULL);367 nrnDelete((number*) &tmp, NULL);368 } 369 nrnDelete((number*) &gcd, NULL);362 nrnDelete((number*) &gcd_new, r); 363 nrnDelete((number*) &tmp, r); 364 } 365 nrnDelete((number*) &gcd, r); 370 366 return (number)unit; 371 367 } … … 473 469 static BOOLEAN nrnIsMOne(number a, const coeffs r) 474 470 { 475 #ifdef LDEBUG476 if (a == NULL) return FALSE;477 #endif478 471 if((r->ch==2) && (nrnIsOne(a,r))) return FALSE; 479 472 mpz_t t; mpz_init_set(t, (mpz_ptr)a); … … 511 504 number tmp = nrnGcd(a, (number)r->modNumber, r); 512 505 bool res = nrnIsOne(tmp, r); 513 nrnDelete(&tmp, NULL);506 nrnDelete(&tmp, r); 514 507 return res; 515 508 } … … 520 513 mpz_init(tmp); 521 514 mpz_gcd(tmp, (mpz_ptr) k, r->modNumber); 522 if (mpz_cmp_si(tmp, 1)==0) { 515 if (mpz_cmp_si(tmp, 1)==0) 516 { 523 517 mpz_set_ui(tmp, 0); 524 518 return (number) tmp; … … 530 524 static BOOLEAN nrnDivBy(number a, number b, const coeffs r) 531 525 { 532 if (a == NULL) 533 return mpz_divisible_p(r->modNumber, (mpz_ptr)b); 534 else 535 { /* b divides a iff b/gcd(a, b) is a unit in the given ring: */ 536 number n = nrnGcd(a, b, r); 537 mpz_tdiv_q((mpz_ptr)n, (mpz_ptr)b, (mpz_ptr)n); 538 bool result = nrnIsUnit(n, r); 539 nrnDelete(&n, NULL); 540 return result; 541 } 526 /* b divides a iff b/gcd(a, b) is a unit in the given ring: */ 527 number n = nrnGcd(a, b, r); 528 mpz_tdiv_q((mpz_ptr)n, (mpz_ptr)b, (mpz_ptr)n); 529 bool result = nrnIsUnit(n, r); 530 nrnDelete(&n, NULL); 531 return result; 542 532 } 543 533 … … 559 549 return erg; 560 550 } 561 if (a == NULL) a = (number)r->modNumber;562 551 mpz_ptr erg = (mpz_ptr)omAllocBin(gmp_nrz_bin); 563 552 mpz_init(erg); … … 574 563 { 575 564 WerrorS("Division not possible, even by cancelling zero divisors."); 576 WerrorS("Result is integer division without remainder."); 577 mpz_tdiv_q(erg, (mpz_ptr) a, (mpz_ptr) b); 578 nrnDelete((number*) &gcd, NULL); 579 return (number)erg; 565 nrnDelete((number*) &gcd, r); 566 nrnDelete((number*) &erg, r); 567 return (number)NULL; 580 568 } 581 569 // a / gcd(a,b) * [b / gcd (a,b)]^(-1) … … 583 571 mpz_divexact(erg, (mpz_ptr)a, gcd); 584 572 mpz_mul(erg, erg, tmp); 585 nrnDelete((number*) &gcd, NULL);586 nrnDelete((number*) &tmp, NULL);573 nrnDelete((number*) &gcd, r); 574 nrnDelete((number*) &tmp, r); 587 575 mpz_mod(erg, erg, r->modNumber); 588 576 return (number)erg; … … 626 614 mpz_ptr erg = (mpz_ptr)omAllocBin(gmp_nrz_bin); 627 615 mpz_init(erg); 628 if (a == NULL) a = (number)r->modNumber;629 616 mpz_tdiv_q(erg, (mpz_ptr)a, (mpz_ptr)b); 630 617 return (number)erg; … … 838 825 } 839 826 else 840 if ( nrnDivBy(NULL, (number) nrnMapModul,dst))827 if (mpz_divisible_p(dst->modNumber,nrnMapModul)) 841 828 { 842 829 mpz_divexact(nrnMapCoef, dst->modNumber, nrnMapModul); … … 901 888 BOOLEAN nrnDBTest (number a, const char *f, const int l, const coeffs r) 902 889 { 903 if (a==NULL) return TRUE;904 890 if ( (mpz_sgn1((mpz_ptr) a) < 0) || (mpz_cmp((mpz_ptr) a, r->modNumber) > 0) ) 905 891 {
Note: See TracChangeset
for help on using the changeset viewer.